Intereting Posts
Как запустить AVD Manager на Mac Можно ли воспроизводить музыку во время звонков, чтобы партнер мог ее услышать? Android Изменение ActionBar при использовании фрагментов Ошибка "не удалось получить модель типа" BasicIdeaProject "с использованием Gradle distribution" в Windows? Можно ли добавить настраиваемое свойство в стиль в ресурсе android? Как получить доступ к папке данных / данных на устройстве Android? Есть ли способ получить ключевой хэш из подписанного APK? Предоставляет ли ведущий знания о Activity / Context плохую идею в шаблоне MVP? Какова наилучшая практика для именования идентификатора XML Element в Android? Ошибка Gradle «Атрибут» xxx «уже определен» в Android Studio Android Studio не знает, где находится Java OnServiceDisconnected () не вызывается после вызова службы stopSelf () В чем разница между представлением и активностью в развитии Android? Параметр Getview "convertview" не имеет значения для нового параметра "position" Как запустить Android-приложение без «android.intent.category.LAUNCHER»

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