Intereting Posts
Android: Security Concern: classes.dex Публично открытое имя WebService отображается в файле Android-приложение onStartup – белый экран Android: как выравнивать объявления в нижней части экрана, даже если свиток открывается? Дальнейшее понимание setRetainInstance (true) Как хранить и извлекать изображения в базе данных Androidite SQL и отображать их на gridview Как планировать задачу на Android Отображать данные SQLite в RecyclerView Не удалось запустить Chrome CustomTabsIntent в моем приложении для Android Java.lang.ClassNotFoundException: android.os.AsyncTask, вызванное службами AdMob / Google Play? Не удалось получить URI из ссылки на хранилище на Firebase HorizontalScrollView может содержать только один прямой дочерний объект Как защита от копирования для Android может быть проверена, если устройство укоренено? Как отправить JSon как BODY В запросе POST на сервер из приложения Android? Насколько велика маленькая, нормальная, большая и большая? Http-сессия всегда создается на версии Android ModernHttpClient (okHttp1.5)

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.