4

複数のフラグメントを含むViewPagerを持つアクティビティがあります。そのフラグメントの1つにあるTextViewにアクセスして、メインアクティビティからテキストを変更するにはどうすればよいですか?複数の方法を試しましたが、すべてNullPointerExceptionで終了しました。

アクティビティ:

public class SummonerOverview extends SherlockFragmentActivity implements TabListener, OnPageChangeListener {


    private ViewPager mPager;
    private PagerAdapter mAdapter;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.summoner_overview);

        initialize();   
    }

    private void initialize() {

        // initialize Pager
        mPager = (ViewPager) findViewById(R.id.viewpager);
        mAdapter = new PagerAdapter(getSupportFragmentManager());
        mPager.setAdapter(mAdapter);
        mPager.setCurrentItem(1);
        mPager.setOnPageChangeListener(this);


        }
}

PagerAdapter:

public class PagerAdapter extends FragmentPagerAdapter {

    public PagerAdapter(FragmentManager fm) {
        super(fm);
        frags = new Fragment[3];
        frags[0] = new StatisticsFragment(0);
        frags[1] = new RatingsFragment(1);
        frags[2] = new HistoryFragment(2);
    }

    private final int NUM_PAGES = 3;
    Fragment[] frags;

    @Override
    public Fragment getItem(int arg0) {
        if (arg0 == 0)
            return frags[0];
        else if (arg0 == 1)
            return frags[1];
        else
            return frags[2];
    }
    @Override
    public int getCount() {
        return NUM_PAGES;
    }

}

フラグメント:

public class StatisticsFragment extends SherlockFragment {

public StatisticsFragment(int fragNr) {
        this.fragNr = fragNr;
    }

@Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_overview_statistics, container, false);

        return v;
    }

}

StatisticsFragmentのTextviewは、fragment_overview_statistics.xmlのIDでラベル付けされていますが、試してみると

TextView tv = (TextView) findViewById(R.id.id_of_the_textview)
tv.setText("text");

initialize()メソッドの後のアクティビティのonCreate()メソッド内から、例外が発生します。

4

1 に答える 1

0

さて、さらに1時間グーグルした後、私は自分の質問を解決すると思います(それを解決するためのより良い方法があると確信していますが)

ここで、MainActivityのフラグメントによって表示されるすべてのデータを保持しonCreateView()、アクティビティのパブリックメソッドを使用して、フラグメントがメソッドでこのデータを使用するようにします。

PagerAdapterで、getItemPosition()を次のように上書きしました。

public int getItemPosition(Object object) {
    return POSITION_NONE;
}

mAdapter.notifyDataSetChanged()これで、一部のデータを更新するたびに、すべてのフラグメントの再作成につながる呼び出しも行います。

それは私には貧弱なハックのように見えますが、うまくいきます。1つのフラグメントの1つのTextViewを変更するためにすべてのフラグメントを再作成する必要があるため、より良い解決策があるはずです。これは、意図された方法ではありません。

于 2013-03-09T13:28:21.653 に答える