2

为此,我已经把头发拉了一天 - 我从 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 文件中的一个函数内对我来说真的不起作用。所以基本上,我需要这样做。希望这可以帮助像我一样被困的人。

   @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 回答