3

リストビューの遅延ロードコードを実行しています。このコードでは、json でテキストと画像の URL を取得し、それらをリストビューに入れています。

画像とテキストの両方が、必要に応じて表示されます。

私が直面している問題は、リストが下または上にスクロールされると、ビューのインデックスが乱れることです。

リストに 10 個の要素があり、画像が横向きにプレビューされているとします。最初は、onclick アクションが正常に動作する 4 つの要素が表示されますが、下にスクロールして 7 番目または 8 番目の要素をクリックすると、インデックス作成が妨げられ、null ポインター例外が発生します。

   l2.setOnItemClickListener(new OnItemClickListener() {
    @Override
     public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
        {
            View curr = parent.getChildAt((int) id);
            TextView c = (TextView)curr.findViewById(R.id.text);
            String sel_item = c.getText().toString();
            Intent intent = new Intent(SubCatListActivity.this,GridActivity.class);
             adapter.imageLoader.clearCache();
            intent.putExtra("gall", sel_item);
            intent.putExtra("cate", cate);
            startActivity(intent);
            Toast.makeText(SubCatListActivity.this,sel_item, Toast.LENGTH_SHORT).show();

         }});

リストのonclickで目的のテキストを取得できないため、テキストビューに問題があるようです。

6 番目の要素に触れると、7 番目または 8 番目のアイテムのテキストが表示されます。

4

4 に答える 4

1

この行を次のように変更して試すことができます

TextView c = (TextView) view.findViewById(R.id.text);

最初の行を削除しますView curr = parent.getChildAt((int) id);

l2.setOnItemClickListener(new OnItemClickListener() {
@Override
 public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
    {

        TextView c = (TextView) view.findViewById(R.id.text);
        String sel_item = c.getText().toString();
        Intent intent = new Intent(SubCatListActivity.this,GridActivity.class);
         adapter.imageLoader.clearCache();
        intent.putExtra("gall", sel_item);
        intent.putExtra("cate", cate);
        startActivity(intent);
        Toast.makeText(SubCatListActivity.this,sel_item, Toast.LENGTH_SHORT).show();

     }});
于 2013-06-05T10:02:00.140 に答える
1

onItemClick メソッドは、クリックしているビューを渡します。上記のコードでは、「ビュー」という名前が付けられています。parent.getChildAt((int)id) は正しいビューを提供しません。

于 2013-06-05T10:03:26.550 に答える
1

パラメータから取得したビューを使用する必要があります。

TextView c = (TextView)ビュー.findViewById(R.id.text);

  l2.setOnItemClickListener(new OnItemClickListener() {
 @Override
 public void onItemClick(AdapterView<?> parent, View view,int position, long id) 
    {

        TextView c = (TextView)view.findViewById(R.id.text);
        String sel_item = c.getText().toString();
        Intent intent = new Intent(SubCatListActivity.this,GridActivity.class);
         adapter.imageLoader.clearCache();
        intent.putExtra("gall", sel_item);
        intent.putExtra("cate", cate);
        startActivity(intent);
        Toast.makeText(SubCatListActivity.this,sel_item, Toast.LENGTH_SHORT).show();

     }});
于 2013-06-05T10:11:26.730 に答える