Android ViewPager 和 ListViews [英] Android ViewPager and ListViews
问题描述
我对 Android 开发和整体开发比较陌生.我无法掌握 ViewPager 的语法/过程.
I'm relatively new to Android development and development overall. I'm having trouble grasping the syntax/process for ViewPager.
我有几个 ListView 想要实现到 ViewPager 中.我已经加载了兼容包和所有东西.但是我还没有看到任何有关如何执行此操作的完整示例.
I have several ListViews that I want to implement into a ViewPager. I've got the compatibility pack loaded and everything. But I haven't seen any complete examples of how to do this.
我通过查看示例学习得最好.如果有人可以发布您在其中实施此类事情的任何项目的示例,请告诉我.
I learn best by looking at examples. If someone can post an examples of any projects you've implemented this sort of thing in, please let me know.
问题是当我尝试启动我的活动时,我在这条线上得到一个空指针异常:
The issue is that I get a Null Pointer Exception on this line when trying to launch my activity:
listView1.setAdapter(new ArrayAdapter<Object>(this, R.layout.rowlayout, list1));
我怀疑我只是做错了这一切.如果我不使用 ViewPager,我可以获得两个列表来显示它们的内容.所以我知道列表不为空...
I suspect that I'm just doing this all wrong. If I don't use the ViewPager, I can get both lists to display their content. So I know the lists aren't null...
感谢 VenomM 下面的回答!这是我最终使用的代码,对 VenomM 的示例稍作修改.
Thanks to VenomM for the answer below! Here's the code I ended up using, slightly modified from VenomM's examples.
ViewPagerAdapter:
ViewPagerAdapter:
public class ViewPagerAdapter extends PagerAdapter implements TitleProvider
{
private ListView listView1;
private static String[] titles = new String[]
{
"Page 1",
"Page 2",
"Page 3",
};
private final Context context;
public ViewPagerAdapter( Context context )
{
this.context = context;
}
@Override
public String getTitle( int position )
{
return titles[ position ];
}
@Override
public int getCount()
{
return titles.length;
}
@Override
public Object instantiateItem(View collection, int position) {
LayoutInflater layoutInflater = ((Activity) context).getLayoutInflater();
listView1 = (ListView) layoutInflater.inflate(R.layout.listview1, null);
String[] listData = null;
MyArrayAdapter dataAdapter;
if (position == 0) {
listData = context.getResources().getStringArray(R.array.list1);
dataAdapter = new MyArrayAdapter((Activity) context,
R.layout.rowlayout, listData);
} else if (position == 1) {
listData = context.getResources().getStringArray(R.array.list2);
dataAdapter = new MyArrayAdapter((Activity) context,
R.layout.rowlayout, listData);
} else {
listData = context.getResources().getStringArray(R.array.list3);
dataAdapter = new MyArrayAdapter((Activity) context,
R.layout.rowlayout, listData);
}
listView1.setAdapter(dataAdapter);
listView1.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapter, View view,
int position, long arg3) {
Toast.makeText(context,
adapter.getAdapter().getItem(position).toString(),
Toast.LENGTH_LONG).show();
}
});
((ViewPager) collection).addView(listView1, 0);
return listView1;
}
@Override
public void destroyItem(View collection, int position, Object view) {
System.out.println("on destroyItem()");
((ViewPager) collection).removeView((ListView) view);
}
@Override
public boolean isViewFromObject(View view, Object object) {
System.out.println("on isViewFromObject()");
return view == ((ListView) object);
}
@Override
public void finishUpdate( View view ) {}
@Override
public void restoreState( Parcelable p, ClassLoader c ) {}
@Override
public Parcelable saveState() {
return null;
}
@Override
public void startUpdate( View view ) {}
}
阵列适配器:
public class MyArrayAdapter extends ArrayAdapter<String>{
private Activity context = null;
private String[] names = null;
private int rowLayoutId;
public MyArrayAdapter(Activity context, int textViewResourceId, String[] names) {
super(context, textViewResourceId, names);
this.context = context;
this.names = names;
this.rowLayoutId =textViewResourceId;
}
// static to save the reference to the outer class and to avoid access to
// any members of the containing class
static class ViewHolder {
protected ImageView imageView;
protected TextView textView;
}
}
推荐答案
我仍然无法理解为什么要使用对象参数更改 Arrayadapter,如果您希望它包含字符串项.尝试改变
I still can't understand why you change your Arrayadapter with object argument, if you want it to hold string items. Try changing
new ArrayAdapter<Object>(this, R.layout.rowlayout, list1)
到
new ArrayAdapter<String>(this, R.layout.rowlayout, list1)
我使用了自定义 ArrayAdapter,一切正常.如果你成功了,请告诉我.
I used a custom ArrayAdapter, everything worked fine for me. Please let me know if you succeed.
这篇关于Android ViewPager 和 ListViews的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!