web-dev-qa-db-ja.com

ArrayAdapterのgetView()メソッドが呼び出されていません

私はAndroid開発に非常に慣れていません。タグ(フラグメントを介して追加されます)を使用してアプリケーションをビルドしようとしています。フラグメントの1つで、リストを表示しようとしています。これリストは、ArrayAdapterから拡張したListAdapterを使用して入力され、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>

私がこの仕事をすることができる方法を見つけるのを手伝ってください。

15
user1272934

コンストラクターにデータを提供し、コンストラクター内で正しい呼び出しを行うのを忘れただけです。

public ListViewAdapter(Context context,int resource, int textViewResourceId, List<YourObjectType> items) {
    super(context,resource,textViewResourceId, items);
    this.context1 = context;
    // TODO Auto-generated constructor stub
}
50
fischer_zh

現在、データを提供していません。それでもリストで何が起こっているかを確認したい場合は、getCount()関数をオーバーライドしてください。

こういうことだと思います。

public int getCount(){
    return 1;
}

これにより、リストに1つのアイテムが描画されます。また、getView()を呼び出します。そして、データソースを提供する方法を見つけたら、getCount()をリストのサイズに変更します。ここでチュートリアルをチェックしてください

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

18
Shubhayu

カスタムアレイアダプターを作成するときは、どちらかを使用する必要があります

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()メソッドをオーバーライドする必要があります。

8
siva

アダプタのデータソースを指定していないようです。データソースとは、配列リストやカーソルなど、表示するデータを提供するものです。データソースからのデータがない場合、getview()はまったく呼び出されません。

2
Akhil
  adapter.notifyDataSetChanged();
  lv.setAdapter(adapter);

ポジションを入れ替える

Layoutinflator=getLayoutInflator();
1
       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;
  }
0
Nikhil Lamba