2016-04-06 62 views
0

我創建了一個自定義列表視圖與ImageView的兩個TextViews現在我面臨的問題,當我嘗試設置onClicklistner到該按鈕 我想每一個按鈕自定義列表視圖使用按鈕OnClickListener

要做不同方法的按鈕

這裏是我的代碼爲customlistview類 我已經使用臨時onclicklistner該按鈕,顯示吐司「買」 我想要做的是,點擊按鈕後,我必須返回食物的價格。

class CustomListView extends ArrayAdapter { 
public CustomListView(Context context, String[] resource) { 
    super(context,R.layout.custom_view , resource); 
} 
Toast toast= null; 


@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    LayoutInflater MyInflater = LayoutInflater.from(getContext()); 
    View CustomView = MyInflater.inflate(R.layout.custom_view, parent, false); 
    String SingleItem= (String) getItem(position); 
    final TextView text =(TextView)CustomView.findViewById(R.id.Itemname); 
    final ImageView Image= (ImageView)CustomView.findViewById(R.id.icon); 
    final TextView Pricetag= (TextView)CustomView.findViewById(R.id.PriceTextView); 
    text.setText(SingleItem); 
    switch (SingleItem) 
    { 
     case "Chicken": 
      Image.setImageResource(R.drawable.desert1); 
      Pricetag.setText("Rs 300"); 
      break; 
     case "soap": 
      Image.setImageResource(R.drawable.desert2); 
      Pricetag.setText("Rs 300"); 
      break; 
     case "Fish": 
      Image.setImageResource(R.drawable.fish); 
      Pricetag.setText("Rs 100"); 
      break; 
     default: 
      Image.setImageResource(R.drawable.myimage); 
      Pricetag.setText("Rs 0.00"); 
      break; 
    } 

    final Button Buybutton= (Button)CustomView.findViewById(R.id.BuyButton); 

    toast = Toast.makeText(getContext(), "", Toast.LENGTH_LONG); 
    Buybutton.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      toast.setText("Bought"); 
      toast.show(); 

     } 
    }); 

    text.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      toast.setText(text.getText().toString()); 
      toast.show(); 

     } 
    }); 
    return CustomView; 
} 
} 
+0

您可以修改您的適配器類與對象的一些自定義的數組(不只是字符串),恩'MyItems'其中將包含項目名稱,以及價格和其他所需的數據進行工作。所以你可以在一個地方工作。回到你的問題,你想打幾個方法?你可以''Buybutton.setTag()'爲一些整數的按鈕,然後'onClick(View v)'基於'v.getTag()'你可以決定調用哪個方法。 – Yazan

+0

你能舉一個有效的例子嗎?這將是非常有用的...我想要更多的30個方法 –

+0

WOW,即使這太多了,你將有1-創建30個方法,2-有一個if語句30'if else'我可以告訴你樣本,但你爲什麼不解釋案件更好(編輯問題)並告訴我們爲什麼你需要30個方法,我們可能會告訴你更好的方法來做到這一點,用更少的方法來實施 – Yazan

回答

0

爲了記錄在案,應該有更好的方式來做到這一點,使用食品-ID或其他的方法來防止這種情況,但根據您的要求,我們開始吧:

1 -getView()當你在按鈕即參考:

final Button Buybutton= (Button)CustomView.findViewById(R.id.BuyButton); 

做了一個步驟:

Buybutton.setTag(10); 

10在這裏可以是任何其他的號碼,你需要找到一種方法來確定用於每個按鈕,數字,也可能是一個字符串的SingleItem

Buybutton.setTag(SingleItem); 

2前值 -onClick()你需要找出哪些值分配給視圖(按鈕),並基於該值調用的正確方法:

@Override 
public void onClick(View v) { 
    if (v.getTag().toString().equals("xxxxx")){ 
     doSomething(); 
    }else if (v.getTag().toString().equals("yyyy")){ 
     doAnotherThing(); 
    }else if (v.getTag().toString().equals("zzzzz")){ 
     doSomething12(); 
    } 
    //and so on... 
} 

這種方法使用String作爲值setTag()getTag() 如果使用整數,只需更換條件爲belwo:

if (Integer.parseInt(v.getTag().toString()) == 10) 

編輯:

如果我沒理解好,那麼你需要:

Buybutton.setTag(SingleItem); 

和的onClick ():

@Override 
public void onClick(View v) { 
    showPriceTag(v.getTag().toString()); 
} 

add方法showPriceTag()

public void showPriceTag(String type){ 
    switch (type) 
     { 
      case "Chicken": 
       //set the price tag data ... 
       break; 
      case "soap": 
       //set the price tag data ... 
       break; 
      case "Fish": 
       //set the price tag data ... 
       break; 
      default: 
       //set the default price tag data ... 
       break; 
     } 
} 
+0

它的工作..謝謝你的幫助..我使用它像這樣,因爲我不知道如何使自定義數組 –

+0

是啊肯定..謝謝你 –

+0

@SarmadAijaz很好聽,我會編輯問題,並添加另一種更好的方式,使用相同的概念,但較少的工作要做,如果你想要使用它 – Yazan

相關問題