Android ViewPager findViewById не работает – всегда возвращает null

public class HSPTabletTestActivity extends Activity { private class MyPagerAdapter extends PagerAdapter { public int getCount() { return 2; } public Object instantiateItem(View collection, int position) { LayoutInflater inflater = (LayoutInflater) collection.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); int resId = 0; switch (position) { case 0: resId = R.layout.lighttab; break; case 1: resId = R.layout.securitytab; break; } View view = inflater.inflate(resId, null); ((ViewPager) collection).addView(view, 0); return view; } @Override public void destroyItem(View arg0, int arg1, Object arg2) { ((ViewPager) arg0).removeView((View) arg2); } @Override public void finishUpdate(View arg0) { // TODO Auto-generated method stub } @Override public boolean isViewFromObject(View arg0, Object arg1) { return arg0 == ((View) arg1); } @Override public void restoreState(Parcelable arg0, ClassLoader arg1) { // TODO Auto-generated method stub } @Override public Parcelable saveState() { // TODO Auto-generated method stub return null; } @Override public void startUpdate(View arg0) { // TODO Auto-generated method stub } } 

У меня есть этот код там ^^ … Довольно многое взято непосредственно из http://mobile.tutsplus.com/tutorials/android/android-user-interface-design-horizontal-view-paging/ … Я Все еще довольно новый в мире развития Android: /

Теперь я пытаюсь получить доступ к элементу управления spinner и некоторым кнопкам внутри «страниц». Но findViewById продолжает возвращать null!

Я помню, что что-то о макете действительно не существует внутри кода, и его нужно сначала накачивать, что происходит в функции instantiateItem (). И довольно очевидно, что он входит в переменную «view». Но когда я вызываю view.findViewById (R.id.light1_off);

Это кнопка, кстати, она всегда возвращает ZERO! Я даже удостоверился, что он вызвал только, когда на самом деле была загружена страница. Но независимо от того, что я сделал, он всегда возвращает null, и я получаю неприятное исключение nullpointer.

Может ли кто-нибудь помочь мне здесь? Я почти не разбираюсь в идеях, и Google не помогает, уже на странице 5 примерно на 10 различных поисковых запросах.

Solutions Collecting From Web of "Android ViewPager findViewById не работает – всегда возвращает null"

После долгих разочарований и вытягивания волос по этой проблеме я решил это! По крайней мере для меня. Предполагая, что вы использовали учебник tutsplus, как и я, у вас есть отдельные файлы XML для ваших экранов. Теперь я предполагаю, что эти макеты XML содержат макеты внутри них (то есть LinearLayout, RelativeLayout и т. Д.). Теперь эти макеты содержат вашу кнопку и другие виджеты. Что нужно сделать, чтобы иметь возможность findViewById, в фактическом операторе switch в методе instatiateItem инициализировать вашу кнопку следующим образом:

 public Object instantiateItem(View collection, int position) { LayoutInflater inflater = (LayoutInflater) collection.getContext() .getSystemService(Context.LAYOUT_INFLATER_SERVICE); int resId = 0; switch (position) { case 0: resId = R.layout.lighttab; View view = inflater.inflate(resId, null); RelativeLayout layout=(RelativeLayout)view.findViewById(R.id.relLayout); Button button=(Button)layout.findViewById(R.id.button); ((ViewPager) collection).addView(view, 0); return view; case 1: resId = R.layout.securitytab; ... ... return view; } } 

Итак … сначала вам нужно раздуть представление, а затем инициализировать макет, содержащийся в представлении, путем литья типа макета (RelativeLayout) и вызова .findViewById (идентификатор ресурса). Затем вы инициализируете фактический виджет, который вы ищете, делая то же самое, но набрасывая тип виджетов (Button) и вызывая .findViewById (идентификатор ресурса).

Это сработало для меня, поэтому я надеюсь, что это избавит вас от неприятностей! У меня навсегда угадала мысль.

Просто догадайтесь, потому что вы не показываете xml для завышенных. Используете ли вы + @ id. Если не попробовать.

Вы можете избежать этой грязной работы, просто добавив setContentView (R.layout.youlayout) до findViewById