2

私はこれについて 1 日髪を伸ばしてきました - 私は PagerAdapter から継承し、メインのアクティビティから以下を呼び出しました。問題は、以下のテストが常に を返すことnullです。また、デバッグしたところ、MyPagerAdapter.java の instantiateItem メソッドがまったく入力されていないことがわかりました。何を与える?

私が得ることができる助けに感謝します。ありがとう。

橋脚。

    // For the paging swipes
    MyPagerAdapter adapter = new MyPagerAdapter();
    m_ViewPager = (ViewPager) findViewById(R.id.myfivepanelpager);
    adapter.notifyDataSetChanged();
    m_ViewPager.setAdapter(adapter);
    m_ViewPager.setCurrentItem(2);

    View test = m_ViewPager.getChildAt(2);
    ListView theList = (ListView) test.findViewById(R.id.listView1);

MyPagerAdapter.java

public class MyPagerAdapter extends PagerAdapter {

public int getCount() {
    return 5;
}

 @Override
public Object instantiateItem(ViewGroup container, int position) {
    //Log.d("Instantiate Item", null);
    LayoutInflater inflater = (LayoutInflater) container.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    //View view = null; 
    View view; 

    int resId = 0;
    switch (position) {
    case 0:
        resId = R.layout.page1;
        view = inflater.inflate(resId, null);
        TextView txtView =(TextView)view.findViewById(R.id.textView1);
        ListView lstView = (ListView)view.findViewById(R.id.listView1);
        break;
    case 1:
        resId = R.layout.page2;
        view = inflater.inflate(resId, null);
        TextView txtView2 =(TextView)view.findViewById(R.id.textView2);
        break;
    case 2:
        resId = R.layout.page3;
        view = inflater.inflate(resId, null);
        TextView txtView3 =(TextView)view.findViewById(R.id.textView3);
        break;
    case 3:
        resId = R.layout.page4;
        view = inflater.inflate(resId, null);
        TextView txtView4 =(TextView)view.findViewById(R.id.textView4);
        break;
    case 4:
        resId = R.layout.page5;
        view = inflater.inflate(resId, null);
        TextView txtView5 =(TextView)view.findViewById(R.id.textView5);
        break; 
    default:
        resId = R.layout.page1;
        view = inflater.inflate(resId, null);
        break;
    }

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

    return view;
}

@Override
public void destroyItem(ViewGroup 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 int getItemPosition(Object object) {
    return POSITION_NONE;
}
}
4

2 に答える 2

1

まず、Log.d("Instantiate Item", null);null メッセージのため、この行で例外が発生します。

あなたのアダプターを試してみましたが、正常に動作します (instantiateItem が呼び出され、電話でビューを観察します)。onCreate() から「テスト」を実行しようとしたようです。おそらく、 setContentView() で膨張したばかりの ViewPager が準備ができており、膨張直後に子が表示されることを期待しているでしょう。ViewPager は描画時にのみ子項目を必要とするため、そうではありません。

于 2012-08-24T15:34:37.900 に答える
0

同じメモで、位置 0 の ListView を設定するために、PageAdapter 内で行うことに気付きました。これをしようとしている

    m_ViewPager.setCurrentItem(tab.getPosition());
    if (m_ViewPager != null)
    {
    LinearLayout test = (LinearLayout) m_ViewPager.getChildAt(tab.getPosition());
        if (test != null)
        {
            if (tab.getPosition()==0)
            {
                ListView theList = (ListView) test.findViewById(R.id.listView1);
                populateListView(theList, tab.getPosition());
            }
        }
    }

MainActivity.java ファイル内の関数の 1 つの内部では、実際には機能しません。基本的に、私はこれを行う必要がありました。これが私のように立ち往生している人を助けることを願っています。

   @Override
public Object instantiateItem(ViewGroup container, int position) {

    LayoutInflater inflater = (LayoutInflater) container.getContext()
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

    View view; 

    int resId = 0;
    switch (position) {
    case 0:
        resId = R.layout.page1;
        view = inflater.inflate(resId, null);
        TextView textView1 =(TextView)view.findViewById(R.id.textView1);
        ListView listView1 = (ListView)view.findViewById(R.id.listView1);
        populateListView(listView1, container.getContext());
        break;
    case 1:
        resId = R.layout.page2;
        view = inflater.inflate(resId, null);
        TextView textView2 =(TextView)view.findViewById(R.id.textView2);
        break;
    case 2:
        resId = R.layout.page3;
        view = inflater.inflate(resId, null);
        TextView textView3 =(TextView)view.findViewById(R.id.textView3);
        break;
    case 3:
        resId = R.layout.page4;
        view = inflater.inflate(resId, null);
        TextView textView4 =(TextView)view.findViewById(R.id.textView4);
        break;
    case 4:
        resId = R.layout.page5;
        view = inflater.inflate(resId, null);
        TextView textView5 =(TextView)view.findViewById(R.id.textView5);
        break; 
    default:
        resId = R.layout.page1;
        view = inflater.inflate(resId, null);

        break;
    }


    ((ViewPager) container).addView(view, 0);
    return view;
}

private void populateListView(ListView list, Context thisContext)
{
    // We need to use a different list item layout for devices older than Honeycomb
    int layout = Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB ?
            android.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1;

    // Create an array adapter for the list view, using the Ipsum headlines array
    list.setAdapter((new ArrayAdapter<String>(thisContext, layout, Ipsum.Headlines))); 
}
于 2012-08-26T03:17:25.173 に答える