2014-09-11 22 views
0

我有一個由自定義適配器填充的列表視圖。這個listview有一個由imageview和textview組成的自定義佈局。單擊列表視圖中的單個組件

我想要做的是當我從任何一行按下該imageview時,它將更改其UI(setAlpha)並運行後臺網絡請求。

但是,我不知道如何做到這一點,如果組件是獨一無二的。當我點擊任何一行的imageview時,只有最後一行會受到影響。我在適配器中完成了這一切。

@Override 
public View getView(final int i, View view, ViewGroup viewGroup) { 

    LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

    if (view == null) { 
     vh = new ViewHolder(); 
     view = layoutInflater.inflate(R.layout.row_list_follows, null); 
     vh.ivHeart = (ImageView) view.findViewById(R.id.imgHeart); 
     vh.tvMerchantName = (TextView) view.findViewById(R.id.txtMerchantName); 
     view.setTag(vh); 
    } else { 
     vh = (ViewHolder) view.getTag(); 
    } 

    lf = arrListFollow.get(i); 

    vh.tvMerchantName.setText(lf.getMerchantName()); 

    // only the last row affected 
    vh.ivHeart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      if (!lf.isFollowed()) { 
       vh.ivHeart.setAlpha(1f); 
       lf.setFollowed(true); 
      } else { 
       vh.ivHeart.setAlpha(0.3f); 
       lf.setFollowed(false); 
      } 
     } 


    }); 

    return view; 
} 

我認爲這是顯而易見的,因爲所有在此佈局上誇大的圖像獲取相同的ID。到目前爲止,這是我如何做到的,但無法讓它工作得很好。

如何點擊listview行上的單個組件並以編程方式更改其UI?

+0

不完全是一個解決問題的方法,但看看這個視頻由切特哈瑟,你應該得到一個想法如何做到這一點。 https://www.youtube.com/watch?v=YCHNAi9kJI4 – iZBasit 2014-09-11 04:50:09

回答

1

嘗試,因爲使用的onClick view參數:

vh.ivHeart.setTag(lf); 
// only the last row affected 
    vh.ivHeart.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      YOUR_CLASS_NAME obj=(YOUR_CLASS_NAME)view.getTag(); 
      if (!obj.isFollowed()) { 
       view.setAlpha(1f); 
       obj.setFollowed(true); 
      } else { 
       view.setAlpha(0.3f); 
       obj.setFollowed(false); 
      } 
     } 
0

嗯,我有很多問題要解決這個problema但我覺得要糾正這種方法。

在課堂上,多數民衆贊成BaseAdapter 的延伸,我像類型對象的構造函數聲明的ArrayList:

ArrayList<Object> tags = new ArrayList<Object>(); 

爲了什麼?

很好的問題是按鈕或其他組件只知道最後的標籤是指最後一排的那個事件的onclick ...它是隻影響最後一行的原因...

所以

view.setTag(holder); 
      tags.add(view.getTag()); 

這裏保存的標籤是指holderview

public void onClick(View v) { 

       ComponentsHolder holder_current= (ComponentsHolder) tags.get(position); **//HERE we obtain the tag refer to correct holder of position row** 


      if(holder_current.Description.getVisibility()==View.VISIBLE) 
       holder_current.Description.setVisibility(View.GONE); 
      else 
       holder_current.Description.setVisibility(View.VISIBLE); 

      notifyDataSetChanged(); 

      } 
      }); 
相關問題