2012-10-18 4 views
1

Я пытаюсь обновить представление списка, когда я нажимаю на один элемент списка. Например, я пытаюсь сделать что-то вроде этого:update listview от адаптера Array

public class RssItemsAdapter extends ArrayAdapter<Item> { 
private TextView txtTitle; 
private ImageView imgFavourite; 
private int resourceId; 
private Context context; 
private List<Item> items = new ArrayList<Item>(); 

public RssItemsAdapter(Context context, int resourceId, List<Item> items) 
{ 
    super(context, resourceId, items); 
    this.context = context; 
    this.items = items; 
    this.resourceId = resourceId; 
} 

@Override 
public int getCount() { 
    return items.size(); 
} 

@Override 
public Item getItem(int index) { 
    return items.get(index); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) 
{ 
    View row = convertView; 
    Item item = getItem(position);  

    if (row == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     row = inflater.inflate(resourceId, parent, false); 
    } 

    txtTitle = (TextView) row.findViewById(R.id.title); 
    txtTitle.setText(item.getTitle()); 

    imgFavourite = (ImageView) row.findViewById(R.id.favourite); 
    imgFavourite.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 
      if (item.isFavourite() == true) { 
       imgFavourite.setBackgroundResource(android.R.drawable.btn_star_big_off); 
      } 
      else { 
       imgFavourite.setBackgroundResource(android.R.drawable.btn_star_big_on); 
      } 
     } 
    }); 

    // add a "star" icon on favourite items 
    if (item.isFavourite() == true) 
     imgFavourite.setBackgroundResource(android.R.drawable.btn_star_big_on); 
    else 
     imgFavourite.setBackgroundResource(android.R.drawable.btn_star_big_off); 


    return row; 
} 

Каждый раз, когда я нажимаю на значок imgFavourite он должен измениться. В чем проблема?

+0

use notifyDateSetChange() метод listView – Houcine

ответ

0

Не похоже, что вы когда-либо меняете значение item.isFavourite(). Предполагая, что вы хотите, чтобы переключиться, когда этот элемент щелкнул ...

imgFavourite.setOnClickListener(new OnClickListener() { 
    public void onClick(View v) { 

     // Toggle the current state 
     item.setIsFavourite(!item.isFavourite()); 

     if (item.isFavourite() == true) { 
      imgFavourite.setBackgroundResource(android.R.drawable.btn_star_big_off); 
     } 
     else { 
      imgFavourite.setBackgroundResource(android.R.drawable.btn_star_big_on); 
     } 
    } 
}); 

Кроме того, вы должны делать такого рода работу в onItemClickListsner в ListView в. Как и в случае создания новой строки, это создаст новый onClickListener. Помимо этого, проверьте «шаблон держателя вида».

+0

Как это сделать в onViewerListener ListView? Я имею в виду, как я могу получить доступ к дочерним элементам listView? – fmp

+0

Вам предоставляется позиция позиции в этом обратном вызове, и вы можете использовать ее для вызова ListView.getItemAtPosition (position). Вам также предоставляется представление, которое было нажато, если вам нужно манипулировать им. Теперь я понимаю, что вы, вероятно, хотите, чтобы imgFavourite был доступен для просмотра. Если это так, то забудьте о том, что я сказал о onItemClicked (...), поскольку это применимо ко всей строке. –

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