Ссылка/обновление представлений в FragmentPagerAdapter

Я создаю приложение с одним основным действием, а внутри него — FragmentPagerAdapter. Четыре страницы создаются и расширяются из определения XML. Когда я пытаюсь сослаться на любое из представлений, содержащихся на этих страницах, я получаю исключение NullPointerException.

Вот код:

import com.viewpagerindicator.TitlePageIndicator;
import com.viewpagerindicator.TitlePageIndicator.IndicatorStyle;
import android.os.Bundle;  
import android.support.v4.app.FragmentActivity;  
import android.support.v4.view.ViewPager;
import android.widget.TextView;

public class MainActivity extends FragmentActivity {


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        MyFragmentPagerAdapter myFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager());
        ViewPager viewPager = (ViewPager) findViewById(R.id.pager);  
        viewPager.setAdapter(myFragmentPagerAdapter);

        setCustomTitleBar(viewPager);

        **// NullPointerException in next line**
        TextView textView = (TextView) myFragmentPagerAdapter.getItem(0).getView().findViewById(R.id.page0_city);
    }

    private void setCustomTitleBar(ViewPager viewPager){
        TitlePageIndicator titleIndicator = (TitlePageIndicator) findViewById(R.id.page_indicator);
        titleIndicator.setViewPager(viewPager);
        float density = getResources().getDisplayMetrics().density;
        titleIndicator.setBackgroundColor(0x00000000);
        titleIndicator.setFooterColor(0xff99c224);
        titleIndicator.setFooterLineHeight(2 * density); //1dp
        titleIndicator.setFooterIndicatorHeight(3 * density); //3dp
        titleIndicator.setFooterIndicatorStyle(IndicatorStyle.Underline);
        titleIndicator.setTextColor(0xAAAAAAAA);
        titleIndicator.setTextSize(13 * density);
        titleIndicator.setSelectedColor(0xFFFFFFFF);
        titleIndicator.setSelectedBold(true);
    }
}

import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

class MyFragmentPagerAdapter extends FragmentPagerAdapter {
    PageZero p0;
    PageOne p1;
    PageTwo p2;
    PageThree p3;

    public MyFragmentPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
        p0 = new PageZero();
        p1 = new PageOne();
        p2 = new PageTwo();
        p3 = new PageThree();
    }

    @Override
    public Fragment getItem(int index) {
        switch (index) {
        case 0:
            return p0;
        case 1:
            return p1;
        case 2:
            return p2;
        case 3:
            return p3;
        }
        return null;
    }

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

    public CharSequence getPageTitle(int position) {
        switch (position) {
        case 0:
            return "TODAY";
        case 1:
            return "MONDAY";
        case 2:
            return "TUESDAY";
        case 3:
            return "WEDNESDAY";
        }
        return "null";
    }
}

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class PageZero extends Fragment {

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.page0, container, false);
        return view;
    }
}

Я нашел два связанных вопроса, оба не дали мне никаких результатов:
Android: изменить текст в ViewPager
Как изменить представление внутри фрагмента?

Каким будет правильный способ доступа к страницам, их представлениям и содержимому?


person Halik    schedule 11.06.2012    source источник


Ответы (1)


Напишите TextView textView = (TextView)findViewById(R.id.page0_city) в методе onCreateView класса фрагмента примерно так:

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.page0, container, false);
        TextView textView = (TextView)findViewById(R.id.page0_city);
        if(textView!=null) textView.setText("Page0");
        return view;
    }
person shreks7    schedule 25.07.2012