Метод getView () ArrayAdapter не вызывается - PullRequest
15 голосов
/ 16 марта 2012

Я очень новичок в разработке 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 HERE@@@");
        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>

Пожалуйста, помогите мне найти способ, которым я могу сделать эту работу.

Ответы [ 6 ]

50 голосов
/ 09 октября 2012

Вы просто забыли предоставить данные конструктору и затем сделать правильный вызов в конструкторе:

public ListViewAdapter(Context context,int resource, int textViewResourceId, List<YourObjectType> items) {
    super(context,resource,textViewResourceId, items);
    this.context1 = context;
    // TODO Auto-generated constructor stub
}
18 голосов
/ 16 марта 2012

Вы не предоставляете ему никаких данных в настоящее время.Если вы все еще хотите увидеть, что происходит в списке, переопределите функцию getCount ().

Я думаю, что-то в этом роде.

public int getCount(){
    return 1;
}

Это привлечет один элемент в вашемсписок.А также вызовите ваш getView ().И как только вы узнаете, как предоставить свой источник данных, измените getCount () на размер вашего списка.Проверьте учебник здесь

http://www.shubhayu.com/android/listview-with-arrayadapter-and-customized-items

8 голосов
/ 13 августа 2012

Когда мы создаем собственный адаптер массива, мы должны использовать либо

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 ().

2 голосов
/ 16 марта 2012

похоже, вы не указали источник данных для вашего адаптера.Источником данных является любая вещь, которая предоставляет данные для отображения, например, массив или курсор.Если нет данных из источника данных, getview () вообще не будет вызываться.

1 голос
/ 16 марта 2012
  adapter.notifyDataSetChanged();
  lv.setAdapter(adapter);

поменять местами

Layoutinflator=getLayoutInflator();
0 голосов
/ 16 марта 2012
       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;
  }
...