Метод getView() для ArrayAdapter не вызван
Я очень новичок в разработке Android. Я пытаюсь создать приложение с тегами (которые добавляются через фрагменты). В одном из фрагментов я пытаюсь отобразить список. Этот список был заполнен с помощью ListAdapter, который я расширил с ArrayAdapter, и я перегрузил метод getView().
Это мой фрагмент
public class tabcontentActivity extends Fragment {
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
return null;
}
View v = (LinearLayout) inflater.inflate(R.layout.tablayout, container,
false);
ListView lv = (ListView) v.findViewById(R.id.listview1);
ListViewAdapter adapter = new ListViewAdapter(container.getContext(),
android.R.layout.simple_list_item_1, R.id.textview1);
adapter.notifyDataSetChanged();
lv.setAdapter(adapter);
return v;
}
}
И вот как я реализовал ListAdapter
public class ListViewAdapter extends ArrayAdapter {
Context context1;
public ListViewAdapter(Context context,int resource, int textViewResourceId) {
super(context,resource,textViewResourceId);
this.context1 = context;
System.out.println("here aswell!!!!!!");
// TODO Auto-generated constructor stub
}
public View getView(int arg0, View convertView, ViewGroup arg2) {
// TODO Auto-generated method stub
System.out.println("@@@I AM [email protected]@@");
LayoutInflater inflater = LayoutInflater.from(context1);
convertView = inflater.inflate(R.layout.tablayout, null);
TextView wv = (TextView) convertView.findViewById(R.id.textview1);
String summary = "<html><body><h1>This is happening!!!</h1></body></html>";
wv.setText(Html.fromHtml(summary));
convertView.setTag(wv);
return convertView;
}
}
Макет xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<ListView
android:id="@+id/listview1"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</ListView>
<TextView
android:id="@+id/textview1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="myreader" />
</LinearLayout>
Пожалуйста, помогите мне найти способ, с помощью которого я могу выполнить эту работу.
Ответы
Ответ 1
Вы просто забыли предоставить данные конструктору, а затем сделать правильный вызов внутри конструктора:
public ListViewAdapter(Context context,int resource, int textViewResourceId, List<YourObjectType> items) {
super(context,resource,textViewResourceId, items);
this.context1 = context;
// TODO Auto-generated constructor stub
}
Ответ 2
В настоящее время вы не предоставляете никаких данных. Если вы все еще хотите увидеть, что происходит в списке, переопределите функцию getCount().
Я думаю, что это что-то в этом роде.
public int getCount(){
return 1;
}
Это приведет к отображению одного элемента в вашем списке. А также позвоните в getView(). И когда вы узнаете, как предоставить источник данных, измените getCount() на размер вашего списка. Ознакомьтесь с учебным пособием здесь.
http://www.shubhayu.com/android/listview-with-arrayadapter-and-customized-items
Ответ 3
Когда мы создаем пользовательский массив, мы должны использовать
public ArrayAdapter (Context context, int textViewResourceId, T[] objects)
public ArrayAdapter (Context context, int resource, int textViewResourceId, T[] objects)
public ArrayAdapter (Context context, int textViewResourceId, List<T> objects)
public ArrayAdapter (Context context, int resource, int textViewResourceId, List<T> objects)
Если мы не используем упомянутый выше адаптер, нам необходимо переопределить метод getCount().
Ответ 4
похоже, что вы не указали источник данных для своего адаптера. Источником данных является любая вещь, которая предоставляет данные для отображения, например, для архариста или курсора. Если нет данных из источника данных, getview() не будет вообще вызван.
Ответ 5
adapter.notifyDataSetChanged();
lv.setAdapter(adapter);
заменить позиции
Layoutinflator=getLayoutInflator();
Ответ 6
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
if (container == null) {
View v = (LinearLayout) inflater.inflate(R.layout.tablayout, container,
false);
ListView lv = (ListView) v.findViewById(R.id.listview1);
ListViewAdapter adapter = new ListViewAdapter(container.getContext(),
android.R.layout.simple_list_item_1, R.id.textview1);
adapter.notifyDataSetChanged();
lv.setAdapter(adapter);
}
else{
View v = (LinearLayout) inflater.inflate(R.layout.tablayout, container,
false);
ListView lv = (ListView) v.findViewById(R.id.listview1);
ListViewAdapter adapter = new ListViewAdapter(container.getContext(),
android.R.layout.simple_list_item_1, R.id.textview1);
adapter.notifyDataSetChanged();
lv.setAdapter(adapter);
}
return v;
}
и переопределить метод getcount
public int getCount(){
return 100;
}