0

ページアダプター内のテキストビューを更新するためのボタンの実装に取り​​組んでいます。これは私のページアダプターのためにこれまでに持っているコードです

public class CharacterStatsPagerAdapter extends PagerAdapter {
public int getCount() {
    return 2;
}

int maxhp = 0;
View view = null;

public Object instantiateItem(View collection, int position) {
    LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);


    switch (position) {
    case 0:

        view = inflater.inflate(R.layout.characterstats1, null);

        TextView characternamedisplay = (TextView) view.findViewById(R.id.textView1);
        characternamedisplay.setText(com.echaractersheet.BasicInfo.characternameresult);

        TextView genderdisplay = (TextView) view.findViewById(R.id.textView2);
        genderdisplay.setText(com.echaractersheet.BasicInfo.genderresult);

        TextView classdisplay = (TextView) view.findViewById(R.id.textView3);
        classdisplay.setText(com.echaractersheet.BasicInfo.classresult);

        TextView racedisplay = (TextView) view.findViewById(R.id.textView4);
        racedisplay.setText(com.echaractersheet.BasicInfo.raceresult);

        ImageButton plusmaxhp = (ImageButton) view.findViewById(R.id.imageButton1);
        plusmaxhp.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v) {
                maxhp = maxhp + 1;
                TextView maxhpdisplay = (TextView) view.findViewById(R.id.textView5);
                maxhpdisplay.setText(maxhp);

            }

        });

        break;
    case 1:
        view = inflater.inflate(R.layout.characterstats2, null);
        break;
    }

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

    return view;
}

最初の4つのテキストビューは完全に正常に更新されますが、問題は私のimagebuttonにあります。ボタンをクリックして文字hpを更新すると、プログラムフォースが閉じ、logcatによると、nullポインター例外であり、なぜ発生しているのかわかりません。

viewPagerでButtonアクティビティを参照していますか?とviewpagerでボタンonClickメソッドを書く方法は?しかし、私のnullポインタ例外を取り除くことにほとんど成功していません。

どんな助けでも大歓迎です。ありがとうございました!

4

1 に答える 1

1

コードを修正しました。以下を参照してください。

public static class CharacterStatsPagerAdapter extends PagerAdapter {
public int getCount() {
    return 2;
}

int maxhp = 0;
View view = null;
View view2 = null;

public Object instantiateItem(View collection, int position) {
    LayoutInflater inflater = (LayoutInflater) collection.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View localView = null;
    switch (position) {
        case 0:

            view = inflater.inflate(R.layout.page1, null);

            TextView characternamedisplay = (TextView) view.findViewById(R.id.textView1);
            characternamedisplay.setText(R.string.hello_world);

            TextView genderdisplay = (TextView) view.findViewById(R.id.textView2);
            genderdisplay.setText(R.string.hello_world);

            TextView classdisplay = (TextView) view.findViewById(R.id.textView3);
            classdisplay.setText(R.string.hello_world);

            TextView racedisplay = (TextView) view.findViewById(R.id.textView4);
            racedisplay.setText(R.string.hello_world);

            ImageButton plusmaxhp = (ImageButton) view.findViewById(R.id.imageButton1);
            plusmaxhp.setOnClickListener(new View.OnClickListener(){
                public void onClick(View v) {
                    maxhp = maxhp + 1;
                    TextView maxhpdisplay = (TextView) view.findViewById(R.id.textView5);
                    if (maxhpdisplay != null) { 
                        maxhpdisplay.setText(String.valueOf(maxhp));
                    }
                }

            });
            localView = view;
            break;
        case 1:
            view2 = inflater.inflate(R.layout.page2, null);
            localView = view2;
            break;
    }

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

    return localView;
}

@Override
public boolean isViewFromObject(View view, Object o) {

    return (view == (View)o);
}
}

問題は次のとおりです。両方のビューに同じ変数を使用しました。ページャーが最初に最初のアイテムを取得するために呼び出しを行い、後で-2番目のアイテムを取得する場合、変数は、whereにtextView5がない2番目のアイテムへの参照を保持します。

于 2012-08-26T12:55:55.787 に答える