簡體   English   中英

延遲加載onclick listview

[英]Lazy loading onclick listview

我正在為列表視圖執行一個lazyload代碼,其中我在json中獲取文本和圖像URL並將它們放在listview中。

圖像和文本都相應地顯示為我想要的。

我面臨的問題是當列表向下或向上滾動時,視圖的索引會受到干擾。

假設我的列表中有10個元素,圖像橫向預覽。 最初我可以看到其onclick動作正常工作的4個元素,但是當我向下滾動並單擊第7個第8個元素時,索引會受到干擾並導致空指針異常。

   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();

         }});

問題似乎與textview有關,因為我無法在列表的onclick上獲得所需的文本。

如果我觸摸第6個元素,我會得到第7或第8個項目的文本。

您可以嘗試將此行更改為

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();

     }});

onItemClick方法傳入您單擊的視圖。 在上面的代碼中,您將其命名為“view”。 parent.getChildAt((int)id)不會為您提供正確的視圖。

嘗試在位置之間切換並獲取textView文本:

(TextView) view.getText().toString();

你會以這種方式獲得正確的textView

您應該使用從參數中獲得的視圖:

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();

     }});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM