exp*_*ivo 12 android android-listview android-viewpager
我对整个Android开发和开发都比较陌生.我在掌握ViewPager的语法/过程时遇到了麻烦.
我有几个ListViews要实现到ViewPager中.我已经加载了兼容包和一切.但我还没有看到任何完整的例子来说明如何做到这一点.
通过查看示例,我学得最好.如果有人可以发布你已实现此类事情的任何项目的示例,请告诉我.
问题是,在尝试启动我的活动时,我在此行上遇到Null Pointer Exception:
listView1.setAdapter(new ArrayAdapter<Object>(this, R.layout.rowlayout, list1));
Run Code Online (Sandbox Code Playgroud)
我怀疑我只是做错了.如果我不使用ViewPager,我可以获得两个列表来显示其内容.所以我知道列表不是空的...
编辑:
感谢VenomM的答案如下!这是我最终使用的代码,稍微修改了VenomM的示例.
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 ) {}
}
Run Code Online (Sandbox Code Playgroud)
ArrayAdapter:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我仍然无法理解为什么要使用object参数更改Arrayadapter,如果您希望它保存字符串项.尝试改变
new ArrayAdapter<Object>(this, R.layout.rowlayout, list1)
Run Code Online (Sandbox Code Playgroud)
至
new ArrayAdapter<String>(this, R.layout.rowlayout, list1)
Run Code Online (Sandbox Code Playgroud)
我使用了一个自定义的ArrayAdapter,一切都很适合我.如果你成功,请告诉我.
| 归档时间: |
|
| 查看次数: |
24122 次 |
| 最近记录: |