1

ViewPagerに2つのページがあります。2つのページには、アクションを実行する必要があるボタンがあります。ボタンのクリックリスナーは、2番目のページでは完全に機能し、最初のページでは機能しません。これが私が試したアクティビティとアダプタークラスです

    public class MainActivity extends Activity {
    int noofsize = 2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ViewPagerAdapter adapter = new ViewPagerAdapter(MainActivity.this,
                noofsize);
        ViewPager myPager = (ViewPager) findViewById(R.id.reviewpager);
        myPager.setAdapter(adapter);
        myPager.setCurrentItem(0);
    }


}

そして、アダプタークラスは次のとおりです

    public class ViewPagerAdapter extends PagerAdapter implements OnClickListener {
    int size;
    Activity act;
    View layout;
    TextView pagenumber;
    Button click;

    public ViewPagerAdapter(MainActivity mainActivity, int noofsize) {
        // TODO Auto-generated constructor stub
        size = noofsize;
        act = mainActivity;
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return size;
    }

    @Override
    public Object instantiateItem(View container, int position) {
        // TODO Auto-generated method stub
        LayoutInflater inflater = (LayoutInflater) act
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        layout = inflater.inflate(R.layout.pages, null);
        pagenumber = (TextView) layout.findViewById(R.id.pagenumber);
        pagenumber.setText("Now your in Page"+position);
        click = (Button) layout.findViewById(R.id.click);
        click.setOnClickListener(this);
        ((ViewPager) container).addView(layout, 0);
        return layout;
    }

    @Override
    public void destroyItem(View arg0, int arg1, Object arg2) {
        ((ViewPager) arg0).removeView((View) arg2);
    }

    @Override
    public boolean isViewFromObject(View arg0, Object arg1) {
        return arg0 == ((View) arg1);
    }

    @Override
    public Parcelable saveState() {
        return null;
    }

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        if (v == click) {
            Toast.makeText(act, "click event called", Toast.LENGTH_SHORT)
                    .show();
        }

    }

}
4

3 に答える 3

1

私はこの同じ問題に直面しています。私の場合は、instantiateItem でクリックリスナーを設定することで解決しました。あなたはこのようなことをすることができます

click.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

        }
    });

また

これも試すことができます

 click.setOnClickListener(act);
于 2013-07-25T09:33:19.360 に答える
0

この部分は間違っていると思います:

if (v == click) { // What is click ?! you can't compare that
    Toast.makeText(act, "click event called", Toast.LENGTH_SHORT)
            .show();
}

それを次のように置き換えます。

if (v.getId() == R.id.theIdOfTheView) {
    Toast.makeText(act, "click event called", Toast.LENGTH_SHORT)
            .show();
}

これを内部で使用しますinstantiateItem

container.onClickListener();
于 2013-07-25T09:23:32.130 に答える