2011-02-04 3 views
1

У меня есть ListView, который после нажатия на элемент, который я хочу, чтобы он был постоянно выбран, позволяет выполнить некоторые другие действия в зависимости от того, какая кнопка нажата далее. Немного похоже на RadioBox, но в пределах списка. Поэтому при нажатии фон остается желтым, и я сохраняю хранилище, в котором выбран элемент. На данный момент у меня есть это, когда он щелкнут, фон меняется, но с странным поведением, когда выбрано, и я просматриваю ListView, выбранный элемент изменяется.Выбранный элемент ListView Изменение фона

код у меня есть:

ArrayList<HashMap<String, String>> mylist = new ArrayList<HashMap<String, String>>(); 
     for (int i = 0; i < titles.size(); i++){ 
      HashMap<String, String> map = new HashMap<String, String>(); 
      map.put("name", titles.get(i)); 
      mylist.add(map); 
     } 

     SimpleAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.listcell, 
       new String[] {"name"}, new int[] {R.id.txtItemName}); 

     ListView listView1 = (ListView) findViewById(R.id.ListView01); 
     listView1.setAdapter(mSchedule); 
     listView1.setTextFilterEnabled(true); 
     listView1.setOnItemClickListener(new OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> a, View v, int position, long id) { 
         Log.v("Test", v.toString()); 
         v.setBackgroundResource(R.drawable.newbackground); 
        } 
       }); 
} 

ответ

0

Взгляды в ListView получить переработаны таким образом, если выбранный вид гаснет экран это, вероятно, быть повторно использован для одной из текущих видимых элементов. Это может быть странное поведение, которое вы описываете? Если вы хотите сделать несколько потенциальных действий на основе выбора элемента, обычно это делается либо с помощью контекстного меню с длинным нажатием +.

Какое странное поведение?

+0

Похоже, вы правы с этим, я прокручу, а затем вернусь туда, где был, и будет выбран другой элемент. На самом деле это не может быть долгое нажатие, но нужно щелкнуть, изменить фон, а затем я могу либо удалить, либо начать новое намерение в зависимости от следующего нажатия кнопки. – SamRowley

0

Отслеживать выбранные предметы в HashSet. Переопределите метод SimpleAdapter.getView(), чтобы назначить фоновый ресурс на основе выбранных элементов HashSet.

final HashSet<String> selectedItems = new HashSet<String>(); 
    SimpleAdapter mSchedule = new SimpleAdapter(this, mylist, R.layout.listcell,new String[] {"name"}, new int[] {R.id.txtItemName}) { 
     @Override 
     public View getView(int position, View v, ViewGroup parent) { 
      if(v!= null) { 
       String title = titles.get((int)this.getItemId(position)); 
       if(selectedItems.contains(title)) { 
        v.setBackgroundResource(R.drawable.newbackground); 
       } else { 
        v.setBackgroundResource(0); 
       } 
      } 
      return super.getView(position, v, parent); 
     } 
    }; 
    ListView listView1 = (ListView)findViewById(R.id.listView1);   
    listView1.setAdapter(mSchedule); 
    listView1.setTextFilterEnabled(true);   
    listView1.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> a, View v, int position, long id) {  
      String title = titles.get((int)id); 
      if(selectedItems.contains(title)) { 
       v.setBackgroundResource(0); 
       selectedItems.remove(title); 

      } else { 
       v.setBackgroundResource(R.drawable.newbackground); 
       selectedItems.add(title); 
      }     
     } 

    });   
+0

Эй, спасибо за ответ, я не понимаю. Я собираюсь добавить свой код к вопросу, не могли бы вы рассказать мне, как ваш ответ может касаться моей проблемы? – SamRowley

+0

Android утилизирует виды. В вашем случае вы хотите расширить SimpleAdapter и обеспечить реализацию setViewText() и setViewImage(), который устанавливает цвет фона в представлении. –

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