2012-01-09 2 views
0

Как изменить фоновое изображение элементов списка, я могу изменить только 1 элемент фона за раз. Если есть 6 пунктов в списке и если щелчок по 3 пунктам этих 3 вещей, фоновые изображения должны быть изменен, как можно Ниже мой кодЭлементы списка просмотра

public class Places extends Activity { 

    private ListView listView; 


    private int selectedListItem = -1; 
    private Handler mHandler = new Handler(); 
    private Vector<String> data; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.places_custom_list_view); 
     data = new Vector<String>(); 

     // Add data as per your requirement 
     data.add("one"); 
     data.add("two"); 
     data.add("three"); 
     data.add("four"); 
     data.add("five"); 
     listView = (ListView)findViewById(R.id.ListView01); 
     listView.setDivider(null); 

     listView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

       selectedListItem = position; 
       ((EfficientAdapter)listView.getAdapter()).notifyDataSetChanged(); 

       mHandler.postDelayed(new Runnable() { 

        @Override 
        public void run() { 
         // call any new activity here or do any thing you want here   

        } 
       }, 200L); 
      } 
     }); 

     listView.setAdapter(new EfficientAdapter(getApplicationContext())); 
    } 

    private class EfficientAdapter extends BaseAdapter { 
     private LayoutInflater mInflater; 

     public EfficientAdapter(Context context) { 
      mInflater = LayoutInflater.from(context); 
     } 

     public int getCount() { 
      return data.size(); 
     } 

     public Object getItem(int position) { 
      return position; 
     } 

     public long getItemId(int position) { 
      return position; 
     } 

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

      ViewHolder holder; 

      if (convertView == null || convertView.getTag() == null) { 
       convertView = mInflater.inflate(R.layout.places_custom_row_view, null); 
       holder = new ViewHolder(); 

       holder.txtName = (TextView) convertView 
        .findViewById(R.id.name); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      } 

      if(position == selectedListItem) { 
       holder.txtName.setBackgroundResource(R.drawable.cellbghover); 
      } else { 
       holder.txtName.setBackgroundResource(R.drawable.cellbgnew); 
      } 

      holder.txtName.setText(data.get(position)); 

      return convertView; 
     } 
    } 

    static class ViewHolder { 
     TextView txtName; 
    } 
+0

здесь вы сохраняете позицию в SelectedItem. теперь давайте подумаем, что этот selecteditem является arraylist. когда вы нажимаете на элемент 1 из шести элементов. у вас есть 1 в вашем выбранном arraylist, теперь вы выбираете 4-й элемент, так что теперь 4-й элемент будет в вашем arraylist. Теперь в вашем классе адаптера вы получите все значения selecteditem arraylist, и вы можете изменить цвет этих позиций. Я думаю, что это очень простой логин, но для этого вам нужно поработать. Надеюсь, что это поможет вам. –

ответ

0

Попробуйте это, он должен работать логически (я не пробовал, кстати: P).

... 
listView.setOnItemClickListener(new OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 


       EfficientAdapter.saveState.put(position,"selected");     


       mHandler.postDelayed(new Runnable() { 

        @Override 
        public void run() { 
         // call any new activity here or do any thing you want here         
        } 
       }, 200L); 
      } 
     }); 

    ... 
    private class EfficientAdapter extends BaseAdapter { 

     public static HashMap<Integer,String> saveState=new HashMap<Integer,String>(); 
     private LayoutInflater mInflater; 

     public EfficientAdapter(Context context) 
     { 
      mInflater = LayoutInflater.from(context); 
      for(int i=0;i<5;i++) 
      { 
       saveState.put(i,"unselected"); 
      } 
     } 
     public int getCount() { 
      return data.size(); 
     } 
     public Object getItem(int position) { 
      return position; 
     } 
     public long getItemId(int position) { 
      return position; 
     } 
     public View getView(int position, View convertView, ViewGroup parent) { 

      ViewHolder holder; 

      if (convertView == null || convertView.getTag() == null) { 
       convertView = mInflater.inflate(R.layout.places_custom_row_view, null); 
       holder = new ViewHolder(); 

       holder.txtName = (TextView) convertView 
        .findViewById(R.id.name); 

       convertView.setTag(holder); 
      } else { 
       holder = (ViewHolder) convertView.getTag(); 
      }    

      if(saveState.get(position).equals("selected")) 
       holder.txtName.setBackgroundResource(R.drawable.cellbghover); 
      else 
       holder.txtName.setBackgroundResource(R.drawable.cellbgnew); 

      holder.txtName.setText(data.get(position)); 

      return convertView; 
     } 
    } 

    static class ViewHolder { 

     TextView txtName; 
    } 
+0

Спасибо большое, что он работает для меня, и я сделал несколько изменений в коде. в onitemclick я написал ниже код, чтобы выбрать и снять выделение с помощью вашего кода. public void onItemClick (AdapterView parent, View view, int position, long id) {selectedListItem = position; ((EfficientAdapter) listView.getAdapter()) notifyDataSetChanged(). if (EfficientAdapter.saveState.get (position) == "selected") { EfficientAdapter.saveState.put (позиция, "невыбранная"); } else EfficientAdapter.saveState.put (позиция, «выбрано»); mHandler.postDelayed (новый Runnable() { @Override общественности недействительным запуска() {}}, 200L);} – Vamshi

+0

спасибо я принял ваш ответ – Vamshi

+0

вместо saveState.get (I), я принял saveState. get (позиция) – Vamshi

0

Каждый раз, когда вы щелкаете по пункту списка следует весь ListView является обновляется. Итак, если вы хотите показать ранее выбранные элементы, вам также необходимо сохранить запись всего выбранного элемента. и когда listview обновляется, вам нужно проверить, что эти позиции были ранее выбраны или нет, в соответствии с тем, который устанавливает ваш цвет.

Надеется, что это поможет вам

+0

Точно мне нужно то же самое, можете ли вы дать мне образец для этого – Vamshi

0

попробовать это

android:background="@drawable/img_list_background_repeater" 
+0

где я должен писать этот код – Vamshi

+0

вы напишете это в xml ......... – NagarjunaReddy

+0

с этим я могу изменить 1 фоновое изображение на время, как я упомянул об этом в моем вопросе – Vamshi

0
if(clickWord.size()!=0) 
{    
    for(int i = 0;i<clickWord.size();i++){      

    if(clickWord.get(i).equalsIgnoreCase(adListText[position])&&clickIndex.get(i)==position){ 
    wordChk.setBackgroundResource(R.drawable.star_1); 

    } 
}    
} 

Здесь clickWord является ArrayList из выбранных элементов. поэтому, когда элементы будут выбраны, он будет добавлен в этот arraylist, и когда arraylist обновится, я проверю все это, используя этот цикл.

+0

Что такое adListText, clickIndex и wordChk в этом коде, я пользуюсь пользовательским списком – Vamshi

+0

, пожалуйста, см. мой код – Vamshi

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