1

詳細データを表示するためのリストビューがあります。データを文字列の ArrayList に格納しています。ただし、一部のフィールドには表示するデータがない場合がありますが、静的タイトル配列と一致するように配列の長さを同じに保つ必要があります。ここで、カスタム ベース アダプターの getView メソッドで空のデータをトラップできます。

        public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.drug_detail_cell, parent, false);
        }

        // check array bounds
        if (position < getCount()) {

            // check for null items
            String item = items.get(position);
            if (item != null) {

                // get the text views
                TextView title = (TextView) convertView.findViewById(R.id.item_title);
                TextView sub = (TextView) convertView.findViewById(R.id.item_subtitle);

                title.setText(titles.get(position));
                sub.setText(item.toString());                   
            } else {
                // delete row
            }
        }

        return convertView;
    }

私の問題は、データが表示されないのに、リストビューにまだ空の行があることです。私の質問は、その行を削除するにはどうすればよいですか? どんな助けでも大歓迎です。ありがとうございます。

4

2 に答える 2

2

CustomListAdapter から行を削除する場合:

その呼び出しの後、指定されたインデックスから ArrayAdapter からアイテムを削除しますnotifyDatasetChanged。listView が更新されます。

CustomAdapterClass

@Override
public void remove(String object) {
    super.remove(object);

         // your other code
}

ListActivityクラスで:

CustomAdapterClass adap = new CustomAdapterClass();

adap.remove("hello world");

adap.notifyDatasetChanged(); // this will update your listView

私のコードは、bare bone exampleあなたの目標を達成する方法を示すためのものです。

于 2013-08-17T18:00:06.743 に答える
1

ヒントがあります。else 句では、空のビューを返します

else{
    View v = new View(context);
    v.setLayoutParams(new AbsListView.LayoutParams(0, 0));
    return v;
}

ただし、リストに仕切りがある場合、空のビューの下の仕切りは 2 倍になります。

別の場合: getView を呼び出す前に、すべての null データを処理する必要があると思います。つまり: - getCount(){ ループ内で位置から新しいマップを作成し、null データ
ループではなく、すべてのデータをカウントします!=null; リターンカウント; }

getView 関数で新しいマップを使用します。

この助けを願っています。

于 2013-08-17T17:46:10.817 に答える