Question

In my android app I am using ViewPager to navigate between 4 XML. Following is the code used.

package com.win.kora;

import android.app.Activity;
import android.graphics.Canvas;
import android.graphics.Paint;
import android.graphics.drawable.GradientDrawable;
import android.os.Bundle;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v4.view.ViewPager.OnPageChangeListener;
import android.view.LayoutInflater;
import android.view.SurfaceView;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class Htpnew extends Activity
{
private ViewPager viewPager;

private LinearLayout page1;
private LinearLayout page2;
private LinearLayout page3;
private LinearLayout page4;
private TextView tv2, tv3, tv4, tv6, tv7, tv8;
private SurfaceView sv;
private Canvas c;
private Paint paint= new Paint(Paint.ANTI_ALIAS_FLAG), paint1= new Paint(Paint.ANTI_ALIAS_FLAG);


@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);



    setContentView(R.layout.htpnew);
    viewPager = (ViewPager) findViewById(R.id.pager);

    viewPager.setAdapter(new MainPageAdapter());

    viewPager.setOnPageChangeListener(new OnPageChangeListener() {

        @Override
        public void onPageSelected(int position)
        {
            Toast.makeText(Htpnew.this, "page " + (position + 1), Toast.LENGTH_SHORT).show();               
        }

        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels)
        {

        }

        @Override
        public void onPageScrollStateChanged(int state)
        {

        }
    });     

}

class MainPageAdapter extends PagerAdapter
{

    @Override
    public int getCount()
    {
        return 4;
    }

    @Override
    public Object instantiateItem(ViewGroup collection, int position)
    {
        View page = null;
        switch (position)
        {
        case 0:
            if (page1 == null)
            {
                page1 = (LinearLayout) LayoutInflater.from(Htpnew.this).inflate(R.layout.page_one, null);

            }
            page = page1;
            break;
        case 1:
            if (page2 == null)
            {
                page2 = (LinearLayout) LayoutInflater.from(Htpnew.this).inflate(R.layout.page_two, null);
            }
            page = page2;
            break;
        case 2:
            if (page3 == null)
            {
                page3 = (LinearLayout) LayoutInflater.from(Htpnew.this).inflate(R.layout.page_three, null);

            }
            page = page3;
            break;
        default:
            if (page4 == null)
            {
                page4 = (LinearLayout) LayoutInflater.from(Htpnew.this).inflate(R.layout.page_four, null);
            }
            page = page4;
            break;
        }

        ((ViewPager) collection).addView(page, 0);

        return page;
    }

    @Override
    public boolean isViewFromObject(View view, Object object)
    {
        return view == object;
    }

    @Override
    public void destroyItem(View collection, int position, Object view)
    {
        ((ViewPager) collection).removeView((View) view);
    }


}

}

However, I want to make changes in these XML using java, like changing background color of a textview etc - for eg,
tv8=(TextView) findViewById(R.id.tv8); GradientDrawable gd = (GradientDrawable) tv8.getBackground(); gd.setColor(0xFFFF0000);

Even there is a surfaceview on which some drawing has to be done based on user input. Such changes are required in all the 4 XML. Where this code has to be placed ?

Was it helpful?

Solution

You should place the code to change background (or modifying any part of the view) inside the adapter. To find a particular TextView you could use

case 2:
        if (page3 == null)
        {
            page3 = (LinearLayout)LayoutInflater.from(Htpnew.this).inflate(R.layout.page_three, null);

        }
        TextView tv = (TextView)page3.findViewById(R.id.tv8);
        // modify text view here
        page = page3;
        break;
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top