Android ViewPager и ListViews

Я относительно новичок в разработке и разработке Android в целом. У меня возникли проблемы с пониманием синтаксиса / процесса для ViewPager.

У меня есть несколько ListViews, которые я хочу реализовать в ViewPager. У меня загружен пакет совместимости и все такое. Но я не видел никаких примеров того, как это сделать.

Я лучше всего изучаю примеры. Если кто-то может опубликовать примеры любых проектов, в которые вы реализовали подобные вещи, пожалуйста, дайте мне знать.

Проблема в том, что я получаю исключение Null Pointer Exception в этой строке при попытке запустить свою активность:

listView1.setAdapter(new ArrayAdapter<Object>(this, R.layout.rowlayout, list1)); 

Я подозреваю, что я просто делаю все это неправильно. Если я не использую 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 ) {} } 

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; } } 

Я все еще не понимаю, почему вы меняете Arrayadapter с аргументом object, если хотите, чтобы он содержал строковые элементы. Попробуйте изменить

 new ArrayAdapter<Object>(this, R.layout.rowlayout, list1) 

в

 new ArrayAdapter<String>(this, R.layout.rowlayout, list1) 

Я использовал настраиваемый ArrayAdapter, все работало отлично для меня. Пожалуйста, дайте мне знать, если вам удастся.

Вот пример:

Основная деятельность:

 public class MainActivity extends Activity { /** Called when the activity is first created. */ private Context mContext; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mContext = this; setContentView(R.layout.main); ListView listview1 = new ListView(mContext); ListView listview2 = new ListView(mContext); ListView listview3 = new ListView(mContext); Vector<View> pages = new Vector<View>(); pages.add(listview1); pages.add(listview2); pages.add(listview3); ViewPager vp = (ViewPager) findViewById(R.id.viewpager); CustomPagerAdapter adapter = new CustomPagerAdapter(mContext,pages); vp.setAdapter(adapter); listview1.setAdapter(new ArrayAdapter<String>(mContext, android.R.layout.simple_list_item_1,new String[]{"A1","B1","C1","D1"})); listview2.setAdapter(new ArrayAdapter<String>(mContext, android.R.layout.simple_list_item_1,new String[]{"A2","B2","C2","D2"})); listview3.setAdapter(new ArrayAdapter<String>(mContext, android.R.layout.simple_list_item_1,new String[]{"A3","B3","C3","D3"})); } } 

CustomViewPagerAdapter.java

 public class CustomPagerAdapter extends PagerAdapter { private Context mContext; private Vector<View> pages; public CustomPagerAdapter(Context context, Vector<View> pages) { this.mContext=context; this.pages=pages; } @Override public Object instantiateItem(ViewGroup container, int position) { View page = pages.get(position); container.addView(page); return page; } @Override public int getCount() { return pages.size(); } @Override public boolean isViewFromObject(View view, Object object) { return view.equals(object); } @Override public void destroyItem(ViewGroup container, int position, Object object) { container.removeView((View) object); } } 

Для получения дополнительной информации проверьте мой блог. Здесь .

Какой ViewPager вы используете? Совместимость с V4?

Если да, дважды проверьте события. В частности, разница между onCreate, onCreateView и onActivityCreated.

Intereting Posts
Не ударить точки останова, отлаживая тесты Android Junit в Eclipse Android OpenGL ES 2.0 ограничивается только 16 текстурами в памяти? Распространение (и обновление) корпоративного приложения для Android, которое будет использоваться только внутри компании Как разрешить «Дублировать файлы, скопированные в APK META-INF / *» Не удалось установить textView1.setAutoLinkMask (0) – он остается доступным для клика BitmapFactory.decodeStream из активов возвращает значение null на Android 7 Простой HttpURLConnection POST-файл multipart / form-data от android до google blobstore Рисование и масштабирование ImageView и холста в Android Ошибка SVN при затмении с помощью операции удаления (по-видимому) Как отправить SMS из приложения Android без записи в виде SMS-сообщения устройства? Как импортировать или вставлять контакты из .vcf-файла в Android программно? Альтернатива PointToPosition для RecycleView Как нарисовать многоцветный жест в одном оверле Локальный DNS-сервер на Android Схема заголовка над TabLayout