4

私はこのアンドロイドとJavaが初めてです。

ビューページャーはすべての xml レイアウトをスライドできるようになりましたが、それらのアイテムにアクセスする方法がわかりません。

を使用してみましたが、 mybutton にButton mybutton = (Button) findViewById (R.layout.result)設定しonClickListenerましたが、実行するたびに強制的に閉じられました。

これが私のコードです:

public class main extends Activity {

    private ViewPager myviewpager;
    private ViewPagerAdapter myviewpageradapter;
    private static int NUM_AWESOME_VIEWS = 12;
    Button button_1;



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

        myviewpageradapter = new ViewPagerAdapter();
        myviewpager = (ViewPager) findViewById(R.id.myviewpager);
        myviewpager.setAdapter(myviewpageradapter);

            button_1 = (Button) myviewpager.findViewById(R.id.first_button);
            button_1.setOnClickListener(new OnClickListener() {
                public void onClick(View v) {
                    finish();
                }
            });
    }

    private class ViewPagerAdapter extends PagerAdapter {

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

        @Override
        public Object instantiateItem(View collection, int position) {
                LayoutInflater layoutinflater = getLayoutInflater();

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

                switch (position)
                {
                    case 0 : view = layoutinflater.inflate(R.layout.page1, null); break;
                    case 1 : view = layoutinflater.inflate(R.layout.page2, null); break;
                    case 2 : view = layoutinflater.inflate(R.layout.page3, null); break;
                    case 3 : view = layoutinflater.inflate(R.layout.page4, null); break;
                    case 4 : view = layoutinflater.inflate(R.layout.page5, null); break;
                    case 5 : view = layoutinflater.inflate(R.layout.page6, null); break;
                    case 6 : view = layoutinflater.inflate(R.layout.page7, null); break;
                    case 7 : view = layoutinflater.inflate(R.layout.page8, null); break;
                    case 8 : view = layoutinflater.inflate(R.layout.page9, null); break;
                    case 9 : view = layoutinflater.inflate(R.layout.page10, null); break;
                    case 10 : view = layoutinflater.inflate(R.layout.page11, null); break;
                    case 11 : view = layoutinflater.inflate(R.layout.result, null);break;
                }
                ((ViewPager) collection).addView(view,0);
                return view;
        }

        @Override
        public void destroyItem(View collection, int position, Object view) {
                ((ViewPager) collection).removeView((View) view);
        }



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

        @Override
        public void finishUpdate(View arg0) {}


        @Override
        public void restoreState(Parcelable arg0, ClassLoader arg1) {}

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

        @Override
        public void startUpdate(View arg0) {}

    }
4

2 に答える 2

2

アイテムがおそらく見つからないことが問題かもしれませんので、これを試してください(ビューが LinearLayout でない場合は変更してください)

LayoutInflater getView = (LayoutInflater)getApplicationContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);

LinearLayout view1 =(LineaLayout)getView.inflate(R.layout.your_view,null);

ただし、ボタンに onClickListener が設定されていると、さらに例外がスローされる場合があります。ボタンだけの場合は、XML で定義します。

android:onClick"buttonClick"

次にコードで

public void buttonClick(View v){

// do something

}

後でボタンを参照する必要があるためにこれが不可能な場合、私は同じ問題に悩まされており、それがどのように機能するかを知りたい.

于 2012-01-17T16:19:31.393 に答える
0

ここでの問題は、まだインスタンス化 (膨張) されていないビュー (findViewById) を見つけようとしていることにあると思います。ViewPagerAdapter 型の instatiateItem メソッド内にボタン リスナーを設定してみてください。

例:

    switch(position){
    case 0 : 
    view = layoutinflater.inflate(R.layout.page1, null); 
    button_1 = (Button) view.findViewById(R.id.first_button);
    button_1.setOnClickListener(new OnClickListener() {
         public void onClick(View v) {
               finish();
               }
         });
    break;
    (...)    
    }
于 2012-06-10T17:11:01.557 に答える