2013-10-28 15 views
0

我已經做了網格視圖,其中我必須做多項選擇。但我不想長時間輕敲功能。我只是想單擊可以選擇多個項目。網格視圖是在片段。如何在水龍頭網格視圖項上執行多選功能?

這是我的片段類:

public class FragmentOrder extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     //View view = inflater.inflate(R.layout.g, null); 
     View view = inflater.inflate(R.layout.gridview,null); 
     final GridView listView = (GridView) view.findViewById(R.id.mainGrid); 
     listView.setAdapter(new OrderGridViewAdapter(MainActivity.this)); 
     //int setSelected = 0; 
     listView.setSelected(true); 

     listView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
       // TODO Auto-generated method stub 

      } 
     }); 
     return view; 
    } 
}  

這是我的適配器類:

public class OrderGridViewAdapter extends BaseAdapter{ 
    private Context MContext; 

    public OrderGridViewAdapter(Context C){ 
     MContext = C; 

    } 


    @Override 
    public int getCount() { 
     return mThumbIds.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

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


     View myView; 


     LayoutInflater inflater = (LayoutInflater)MContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
     myView = inflater.inflate(R.layout.grid_items_ontap, null); 


     // Add The Image!!!   
     ImageView iv = (ImageView)myView.findViewById(R.id.grid_item_image_OnTap); 
     iv.setImageResource(mThumbIds[position]); 


     // Add The Text!!! 
     TextView tv = (TextView)myView.findViewById(R.id.grid_item_text_onTap); 
     tv.setText(names[position]); 




     return myView; 
    } 


    private Integer[] mThumbIds = { 
      R.drawable.car, R.drawable.car, 
      R.drawable.car, R.drawable.car, 
      R.drawable.car,R.drawable.car,R.drawable.car,R.drawable.car, R.drawable.car, 
      R.drawable.car, R.drawable.car, 
      R.drawable.car,R.drawable.car,R.drawable.car 
    }; 

    private String[] names={"ab","cd","ef","gh","ij","kl","mn","","","","","","",""}; 
} 

任何建議將受到讚賞。 謝謝。

回答

3

這是你需要做一個粗略的解決方案:

1)維持其中將包含當前選擇的項目的位置列表。

private ArrayList<Integer> mSelected = new ArrayList<Integer>(); 

當您單擊項目(選擇項目)時,將其添加到列表中。當您再次單擊項目時(取消選擇項目),請從列表中刪除。

public void onItemSelect(AdapterView<?> parent, View v, int pos, long id) { 
     Integer position = new Integer(pos); 
     if(mSelected.contains(position)) { 
      mSelected.remove(position); // remove item from list 
      // update view (v) state here 
      // eg: remove highlight 
     } 
     else { 
      mSelected.add(position); // add item to list 
      // update view (v) state here 
      // eg: add highlight 
     } 
    } 

2)你必須更新視圖,如果選擇與否項目展示,我將添加代碼(+在哪裏做註釋)。

3)最後,列表將包含所有已選擇的項目。

下面是向您顯示上述代碼的位置的代碼。

代碼:

public class FragmentOrder extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     //View view = inflater.inflate(R.layout.g, null); 
     View view = inflater.inflate(R.layout.gridview,null); 
     final GridView listView = (GridView) view.findViewById(R.id.mainGrid); 
     final OrderGridViewAdapter adapter = new OrderGridViewAdapter(MainActivity.this) 
     listView.setAdapter(adapter); 
     //int setSelected = 0; 
     listView.setSelected(true); 

     listView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
       adapter.onItemSelect(arg0, arg1, arg2, arg3); 
      } 
     }); 
     return view; 
    } 
} 

適配器:

public class OrderGridViewAdapter extends BaseAdapter{ 
    private Context MContext; 
    private ArrayList<Integer> mSelected = new ArrayList<Integer>(); 

    public OrderGridViewAdapter(Context C){ 
     MContext = C; 
    } 


    @Override 
    public int getCount() { 
     return mThumbIds.length; 
    } 

    @Override 
    public Object getItem(int position) { 
     return null; 
    } 

    @Override 
    public long getItemId(int position) { 
     // TODO Auto-generated method stub 
     return 0; 
    } 

    public void onItemSelect(AdapterView<?> parent, View v, int pos, long id) { 
     Integer position = new Integer(pos); 
     if(mSelected.contains(position)) { 
      mSelected.remove(position); 
      // update view (v) state here 
      // eg: remove highlight 
     } 
     else { 
      mSelected.add(position); 
      // update view (v) state here 
      // eg: add highlight 
     } 
    } 

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


     View myView; 


     LayoutInflater inflater = (LayoutInflater)MContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);   
     myView = inflater.inflate(R.layout.grid_items_ontap, null); 


     // Add The Image!!!   
     ImageView iv = (ImageView)myView.findViewById(R.id.grid_item_image_OnTap); 
     iv.setImageResource(mThumbIds[position]); 


     // Add The Text!!! 
     TextView tv = (TextView)myView.findViewById(R.id.grid_item_text_onTap); 
     tv.setText(names[position]); 

     // Set view highlight here, based on if it is selected or not.. 
     if(mSelected.contains(position)) { 
      // update view (v) state here 
      // eg: add highlight 
     } 
     else { 
      // update view (v) state here 
      // eg: remove highlight 
     } 


     return myView; 
    } 


    private Integer[] mThumbIds = { 
      R.drawable.car, R.drawable.car, 
      R.drawable.car, R.drawable.car, 
      R.drawable.car,R.drawable.car,R.drawable.car,R.drawable.car, R.drawable.car, 
      R.drawable.car, R.drawable.car, 
      R.drawable.car,R.drawable.car,R.drawable.car 
    }; 

    private String[] names={"ab","cd","ef","gh","ij","kl","mn","","","","","","",""}; 
} 

更新: 要更新視圖,你應該閱讀有關如何以編程方式更改視圖的屬性。例如,如果你想改變背景顏色:

v.setBackgroundColor(Color.parseColor("#000000")); // change to black 
+0

如何維護一個列表? –

+1

你見過我的代碼嗎?我已經告訴你你需要做什麼.. –

+0

是的,我已經看到,但我怎麼知道要更新列表,其中將包含所選項目的位置。如你所說..? –

相關問題