5

以下のコードを作成します。

 mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

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

            for (int i = 0; i < mListView.getCount(); i++) {
                View callLogView = mListView.getChildAt(i);   
                mRelativeLayout = (LinearLayout)callLogView.findViewById(R.id.myShow);
                if(i == position){
                    if(mRelativeLayout.getVisibility() == View.GONE){
                        mRelativeLayout.setVisibility(View.VISIBLE);
                    }
                    else{
                        mRelativeLayout.setVisibility(View.GONE);
                    }
                }else{
                    mRelativeLayout.setVisibility(View.GONE);
                }
            }

        }
    });

Listviewの1つの項目をクリックするとビューが表示され、Listviewの他の項目が非表示になるような機能を実現したいです。しかしmListView.getChildAt(i)、exceed の後にヌル ポインターがありますmListView.getChildCount()

これを解決するには?前もって感謝します!

4

2 に答える 2

5

AdapterView.getCount()は、表示されているビューの数よりも大きい可能性があるデータ項目の数を返します。これが、現在表示されている ListView 項目に存在しないビューを見つけようとしているため、null ポインター例外が発生する理由です。

この問題を解決するには、最初に を使用して ListView で最初に表示されている項目を見つけ、 を使用getFirstVisiblePosition()して最後に表示 されている項目を見つける必要がありますgetLastVisiblePosition()。for ループ条件を次のように変更します。

int num_of_visible_view=mListView.getLastVisiblePosition() - 
                                   mListView.getFirstVisiblePosition();

for (int i = 0; i < num_of_visible_view; i++) {
      // do your code here
 }
于 2013-01-31T05:57:09.447 に答える
1

これを onItemClick に実装することはできません。

すべての子ではなく、表示されている子のみにアクセスできるため。

あなたができることはonItemClickにあります

アダプターで位置を送信できます

次に、getView にロジックを設定し、ビューを変更します

リストビューでアダプターを更新するか、変更を通知します。

于 2013-01-31T05:49:12.487 に答える