2012-01-09 88 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是數組列表。當你點擊六項中的項目1時。你的selecteditem數組列表中有1個,現在你選擇第4個項目,所以現在第4個項目將在你的數組列表中。現在在您的適配器類中,您將獲得selecteditem arraylist的所有值,並且可以更改這些位置顏色。我認爲這是非常簡單的登錄,但你需要爲此而努力。希望這會幫助你。 – 2012-01-09 12:57:18

回答

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

非常感謝它爲我工作,我在代碼中做了一些更改。 initemclick我寫下面的代碼來選擇和取消選擇使用您的代碼的項目。 public void onItemClick(AdapterView parent,View view,int position,long id){selectedListItem = position; ((EfficientAdapter)listView.getAdapter())notifyDataSetChanged(); (EfficientAdapter.saveState.get(position)==「selected」){ EfficientAdapter.saveState.put(position,「unselected」); } else EfficientAdapter.saveState.put(position,「selected」); (){ mHandler.postDelayed(new Runnable(){ @Override public void run(){}},200L);} – Vamshi 2012-01-09 13:35:28

+0

非常感謝我接受了您的回答 – Vamshi 2012-01-09 13:40:31

+0

來代替saveState.get(i)我採取了saveState。得到(位置) – Vamshi 2012-01-09 13:41:43

0

每當你在列表視圖項單擊全的ListView是得到刷新。 所以,如果你想顯示先前選擇的項目也需要保持所有選定項目的記錄。當刷新列表視圖時,你需要檢查這個位置是否先前被選中或者沒有按照你的顏色設置。

希望這有助於你

+0

準確地我需要同樣的東西,你能給我這個樣本 – Vamshi 2012-01-09 11:20:32

0

試試這個

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

我應該在哪裏寫這個代碼 – Vamshi 2012-01-09 11:28:40

+0

你會寫在xml ......... – NagarjunaReddy 2012-01-09 11:30:53

+0

這個我能夠改變1背景圖像在一次,因爲我在我的問題中提到這 – Vamshi 2012-01-09 11:37:01

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。所以當項目被選中時,它將被添加到這個數組列表中,當數組列表被刷新時,我使用這個循環來檢查所有這些。

+0

這是什麼是adListText,clickIndex和wordChk在這段代碼中,我使用自定義列表視圖 – Vamshi 2012-01-09 11:58:28

+0

請參閱我的代碼 – Vamshi 2012-01-09 12:01:07