2016-04-06 10 views
0

я создал пользовательский элемент управления ListView с ImageView, два TextViews и кнопки Теперь я столкнулся вопрос, когда я пытаюсь установить onClicklistner на эту кнопку я хочу другой способ, чтобы сделать для каждой кнопкиПользовательская кнопка ListView с помощью OnClickListener

вот мой код для customlistview class Я использовал временный onclicklistner для этой кнопки, который показывает тост «Bought» , что я хочу сделать, так это то, что после нажатия кнопки я должен вернуть цену на еду.

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-statement с 30 'if else', я могу показать вам образец, но почему бы вам не объяснить (измените вопрос) и сообщите нам, почему вам нужен 30-й метод, мы можем показать вам лучший способ сделать это, с меньшим количеством методов для реализации – Yazan

ответ

0

Для записи, должен быть лучший способ сделать это, используя пищевой идентификатор или другой подход, чтобы предотвратить это, но, основываясь на ваш запрос, здесь мы идем:

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

этот подход используется в качестве значения строки в setTag() и getTag() , если вы используете целые числа, просто заменить условие как belwo:

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

EDIT:

Если я хорошо понимаю, то вам необходимо:

Buybutton.setTag(SingleItem); 

и OnClick():

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

метода добавить 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

yeah конечно .. спасибо –

+0

@SarmadAijaz приятно слышать, что я отредактирую вопрос и добавлю еще один лучший способ, используя ту же концепцию, но с меньшим количеством работы, чтобы использовать, если хотите – Yazan

Смежные вопросы