3

ビューページャーを使用してページのリストを並べ替えようとしています。私のプログラムでは、ページ数は 20 から 35 の間で変動します。この数は、sql lite データベースから取得された「questions」文字列配列変数のサイズから決定されます。このコードは以下に示されていませんが、コードが変数のサイズとデータベースからの値を正しく検出していることを確認しました

私の問題は、最初のページが読み込まれることですが、次のページにスクロールしようとするとすぐにプログラムがクラッシュします。各ページは、表示されている現在のページに基づいて動的に変更しようとしている 1 つのテキストビュー (currentQuestion) を除いて同一であることを意図しています (たとえば、8 ページの場合、質問変数から 8 番目の変数をロードして表示します)。 currentQuestion テキストビュー)。

どんな助けでも大歓迎です!各ビューを個別に定義したくない...

このソリューションを見つけたユーザーに感謝します(Android ViewPager および ListViewsからの以下のコード)

問題は、私が最も変更したコード、つまり MainActivity にあると推測しています

主な活動:

public class MainActivity extends Activity {

/** Called when the activity is first created. */

private Context mContext;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mContext = this;
    setContentView(R.layout.main);
    for (int i=0; i<test.count();i++)
    {
        listview.setAdapter(new ArrayAdapter<String>(mContext, android.R.layout.simple_list_item_1, question));
        pages.add(listview);
    }
    System.out.println("test");
    ViewPager vp = (ViewPager) findViewById(R.id.milestoneViewPager);
    PageSwiper adapter = new PageSwiper(mContext,pages);
    vp.setAdapter(adapter);
    int currentPage= vp.getCurrentItem();
    TextView currentQuestion= (TextView) findViewById(R.id.milestoneText);
    currentQuestion.setText(question[currentPage]);
}

}

そして、ここに CustomViewPagerAdapter.java があります

public class CustomPagerAdapter extends PagerAdapter {

private Context mContext;
private Vector<View> pages;

public CustomPagerAdapter(Context context, Vector<View> pages) {
this.mContext=context;
this.pages=pages;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
View page = pages.get(position);
container.addView(page);
return page;
}

@Override
public int getCount() {
return pages.size();
}

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

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View) object);
}

}
4

1 に答える 1

0

あなたが遭遇しているエラーは何ですか?nullPointerだと思いますか?PageSwiperクラスとは何ですか?私が想定しているカスタムクラスですが、なぜそれをアダプタと名付けるのですか?

また、質問のテキストを1回だけ設定します。onCreateメソッドでのみ、ループなどの一部である必要があります。

テキストを動的に変更するには、viewpager関数setOnPageListenerを使用してみてください

ここに例があります:

vp.setOnPageChangeListener(new OnPageChangeListener(){
        @Override
        public void onPageSelected(int position) {
            TextView txtQuestion= (TextView) findViewById(R.id.milestoneText);
            String currentQuestion = question[position]; // Question from your string array
            txtQuestion.setText(currentQuestion );


        }
        @Override
        public void onPageScrolled(int arg0, float arg1, int arg2) {

        }

        @Override
        public void onPageScrollStateChanged(int arg0) {


        }
    });

それが役立つことを願って、それが役立つか、何か他のものが必要な場合は私にメッセージを送ってください

于 2012-12-05T05:42:01.653 に答える