Вызванные: java.lang.NullPointerException: Попытка вызвать виртуальный метод «недействительный android.widget.ListView.setAdapter (android.widget.ListAdapter)» на нулевую ссылке на объектNullpointerexception в диалоговом окне?
У меня есть обычай dialog содержащего ViewPager, содержащий уникальную listview, однако я получаю NullPointerException при попытке установить мой ArrayAdapter:
dialog = new Dialog(this);
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setContentView(R.layout.voicedialog);
dialog.setCanceledOnTouchOutside(false);
dialog.getWindow().setLayout((int)(getResources().getDisplayMetrics().widthPixels*0.90), (int)(getResources().getDisplayMetrics().heightPixels*0.90));
adapter = new MyPageAdapter(this);
pager = (ViewPager) dialog.findViewById(R.id.viewpager);
pager.setOffscreenPageLimit(3);
pager.setAdapter(adapter);
dialog.show();
if(pager.getCurrentItem()==0) { //If on first page of viewpager in dialog (this layout contains the listview)
arrayAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, contactArrayList);
listview = (ListView) dialog.findViewById(R.id.listView);
listview.setAdapter(arrayAdapter);
listview.setEmptyView(dialog.findViewById(R.id.emptyElement));
arrayAdapter.notifyDataSetChanged();
}
Опять же, ListView находится в одном из макетов в моем ViewPager в диалоге моего, с идентификатором listView
Мой вопрос в том, почему список выглядит как null, хотя я четко ссылаюсь на него в приведенном выше коде и как я могу решить эту проблему?
Спасибо за ваше драгоценное время.
EDIT:
VoiceDialog:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/round"
tools:context="...">
<android.support.v4.view.ViewPager
android:id="@+id/viewpager"
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
</RelativeLayout>
Есть три макеты XML, которые входят в ViewPager, но один с ListView является первой страницей, поэтому я ставлю этот код в if(pager.getCurrentItem()==0)
.
Вот ViewPagerAdapter
:
public class MyPageAdapter extends PagerAdapter {
private Context mContext;
LayoutInflater inflater;
public MyPageAdapter(Context context) {
mContext = context;
inflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public Object instantiateItem(ViewGroup collection, int position) {
View view = null;
if(position==0) {
view = inflater.inflate(R.layout.voice1, null);
collection.addView(view);
}if(position==1) {
view = inflater.inflate(R.layout.voice2, null);
collection.addView(view);
}if(position==2) {
view = inflater.inflate(R.layout.voice3, null);
collection.addView(view);
}
return view;
}
@Override
public int getCount() {
return 3;
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0 == arg1;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
}
}
Вы сказали, что пейджера содержит ListView. Диалог 'listview = (ListView) dialog.findViewById (R.id.listView)' не сможет найти его напрямую. –
Вы используете фрагменты в представлении пейджера? –
Можем ли мы увидеть компоновку voicesialog? – Amsheer