2016-04-06 6 views
0

i eine eigene Listenansicht mit einem Image erstellt habe, zwei Textviews und einen Knopf jetzt i Problem konfrontiert bin, wenn ich versuche, auf diese Taste, um onClicklistner ich will andere Methode für jede TasteBenutzerdefinierte Listenansicht mit der Taste OnClickListener

getan werden

hier ist mein code für customlistview klasse ich habe temporäre onclicklistner für diese taste verwendet, die den toast "Gekauft" zeigt was ich tun möchte ist, dass nach dem klicken auf den button muss ich den preis für das essen zurückgeben.

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

können Sie Ihre Adapterklasse ändern mit einigen benutzerdefinierten Array von Objekten zu arbeiten (und nicht nur string), ex 'MyItems' die Artikelnamen enthalten wird, und der Preis und weitere Daten benötigt. so können Sie alles an einem Ort arbeiten. Zurück zu Ihrer Frage, wie viele Methoden möchten Sie anrufen können? Sie können 'Buybutton.setTag()' für die Schaltfläche mit einigen Ganzzahlen verwenden, dann 'onClick (View v)' basierend auf 'v.getTag()' können Sie entscheiden, welche Methode aufgerufen werden soll. – Yazan

+0

Können Sie Beispiel mit einem Arbeitscode geben? das wäre wirklich hilfreich ...Ich will mehr als 30 Methoden –

+0

WOW, auch das ist zu viel, Sie werden 1- erstellen 30 Methode, 2- haben eine if-Anweisung mit 30 'wenn sonst 'ich kann Ihnen Beispiel zeigen, aber warum erklären Sie nicht der Fall besser (bearbeiten Sie die Frage) und sagen Sie uns, warum Sie 30 Methode brauchen, können wir Ihnen bessere Möglichkeit, es zu tun, mit weniger Methoden zu implementieren – Yazan

Antwort

0

Für die Aufzeichnung sollte es ein besserer Weg, dies zu tun, um dies zu verhindern Verwendung von Lebensmittel-ID oder einem anderen Ansatz, aber auf der Grundlage Ihrer Anfrage, hier gehen wir:

1 - in getView() wenn Sie einen Verweis auf die Schaltfläche dh erhalten:

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

einen einen weiteren Schritt tun:

10 hier könnte eine andere Nummer sein, und Sie müssen einen Weg finden, um zu bestimmen, welche Nummer für jede Taste zu verwenden, es könnte auch eine Zeichenfolge, ex-Wert von SingleItem

Buybutton.setTag(SingleItem); 

2 sein - bei onClick() müssen Sie herausfinden, was der Wert der Ansicht (Button) zuweisen und auf der Grundlage dieser Wert rufen Sie die richtige Methode:

@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... 
} 

dieser Ansatz verwendet String als Wert in setTag() und getTag() , wenn Sie ganze Zahlen verwenden, nur die Bedingung als Belwo ersetzen:

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

EDIT:

Wenn ich gut verstehen, dann müssen Sie:

Buybutton.setTag(SingleItem); 

und onClick():

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

add-Methode 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

Es hat funktioniert ... Danke für Ihre Hilfe..ich benutze es so, weil ich nicht weiß, wie man ein benutzerdefiniertes Array –

+0

yeah sure..thank you –

+0

@SarmadAijaz gut zu hören, ich werde die Frage bearbeiten und fügen Sie einen anderen besseren Weg, mit dem gleichen Konzept, aber mit weniger Arbeit zu tun, verwenden Sie es, wenn Sie wollen – Yazan