1

(私はすでにこの同様の質問を見ました)私はListViewカスタムアダプタを書いたforとを持っていonitemclicklistenerます。リストのいずれかの要素が選択されると、それらの要素が表示されていなくてもgetView、の上位4つの要素のそれぞれに対して(2回)呼び出されるという問題ListViewがあります。これは、アダプターを呼び出さなくても発生しnotifyDataSetChangedます。最初の4つのビューは、関係なく2回フェッチされます。これは正常な動作ですか?私の問題は、2回呼び出されることではなく、更新する必要がないときにまったく呼び出されることです。

ちなみに、私はリストビューの高さまたは幅にwrap_contentを使用していません。高さはmatch_parentで、幅は固定数のdpです。

onItemClick()OnItemClickListenerのメソッドは次のとおりです。

public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

      mPicture = pictures[position];
      mPicturesAdapter.setCurrentPicture(mPicture);
      mPicturesAdapter.notifyDataSetChanged();
}

getView()私のカスタムアダプタ(BaseAdapterを拡張する)からはここにあります:

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


    Log.v("tag", "Getting view for position "+position);

    LayoutInflater inflater = LayoutInflater.from(mContext);
    LinearLayout layout = (LinearLayout)
            inflater.inflate(R.layout.picture_thumbnail, parent, false);

// set up the linearlayout here ...

    return layout;
} 

アイテムがクリックされると、クリックされたアイテムに関係なく、位置0〜3に対してgetView()が2回呼び出されます。

4

3 に答える 3

0

実際には、ListViewにデータを入力するために使用しているリスト/グループが何であれ、最初にそれを空にしてから呼び出す必要があります。たとえば、ListAを使用してListViewにデータを入力する場合、2回目以降の更新では、最初にListAを空にしてからアイテムを追加してから、それを使用してデータを入力する必要があります。

于 2012-07-13T05:12:29.167 に答える
0

アダプターを変更するだけで

mPicturesAdapter.setCurrentPicture(mPicture);

ListView は既に更新を試みています。onClick メソッドは、あなたが呼び出さなくても引き続き機能すると思いますnotifyDataSetChanged

于 2012-07-13T03:21:38.960 に答える
-1
if (convertView != null){

           Then populate list

   }
于 2012-07-13T03:01:36.567 に答える