Android - Action Listeners для получения списка динамических кнопок - PullRequest
0 голосов
/ 22 мая 2011

В настоящее время у меня есть просмотр списка, где в каждой строке есть кнопка «скачать», но я не могу правильно настроить прослушиватель действий для каждой кнопки. Мой код в настоящее время устанавливает КАЖДУЮ кнопку на одно и то же действие.

List<MyListItemModel> myListModel = new ArrayList<MyListItemModel>();

....

MyListItemModel item = new MyListItemModel();
JSONObject e = catalogue.getJSONObject(i);
item.id = i;    
item.key = e.getString("key");      
bookKey = (e.getString("key"));  
item.setTitle(e.getString("title"));
item.setDescription(e.getString("description"));
// change the button action to the right download address 
item.listener = new OnClickListener(){
    public void  onClick  (View  v){
        downloadBook(bookKey);
    } 
};

У меня также есть класс MyListItemModel, который содержит каждый элемент книги И MyListAdapter со следующим кодом для его метода getView

 @Override
public View getView(int position, View convertView, ViewGroup parent) {

    if(convertView==null){
        //convertView = renderer;
        convertView = mInflater.inflate(R.layout.shelfrow, null);

    }
    MyListItemModel item = items.get(position);
    TextView label = (TextView)convertView.findViewById(R.id.item_title);
    label.setText(item.getTitle());
    TextView label2 = (TextView)convertView.findViewById(R.id.item_subtitle);
    label2.setText(item.getDescription());
    Button button = (Button)convertView.findViewById(R.id.btn_download);
    button.setOnClickListener(item.listener);
    return convertView;
}

1 Ответ

0 голосов
/ 23 мая 2011

Попробуйте это:

MyListItemModel item = new MyListItemModel();
JSONObject e = catalogue.getJSONObject(i);
item.id = i;    
item.key = e.getString("key");      
bookKey = (e.getString("key"));  
item.setTitle(e.getString("title"));
item.setDescription(e.getString("description"));
// change the button action to the right download address 
item.listener = new OnClickListener(){
    public void  onClick  (View  v){
        downloadBook(new String(bookKey));
    } 

};

Обычно вы передаете ссылку на переменную bookKey, и поэтому каждый раз, когда вы меняете ее, она будет меняться для каждого прослушивателя onClick.

http://www.javacoffeebreak.com/articles/toptenerrors.html См. Номер 6

...