GridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL)不相容低版本系統解決方案,setchoicemode
項目開發中需要使用GridView批處理操作,多項選擇。
但是GridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL)不相容低版本。
找解決方案,查看android sdk提供的demo裡介紹的GridView多項選擇的方法
public class Grid3 extends Activity { GridView mGrid; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); loadApps(); setContentView(R.layout.grid_1); mGrid = (GridView) findViewById(R.id.myGrid); mGrid.setAdapter(new AppsAdapter()); mGrid.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL); mGrid.setMultiChoiceModeListener(new MultiChoiceModeListener()); } private List<ResolveInfo> mApps; private void loadApps() { Intent mainIntent = new Intent(Intent.ACTION_MAIN, null); mainIntent.addCategory(Intent.CATEGORY_LAUNCHER); mApps = getPackageManager().queryIntentActivities(mainIntent, 0); } public class AppsAdapter extends BaseAdapter { public AppsAdapter() { } public View getView(int position, View convertView, ViewGroup parent) { CheckableLayout l; ImageView i; if (convertView == null) { i = new ImageView(Grid3.this); i.setScaleType(ImageView.ScaleType.FIT_CENTER); i.setLayoutParams(new ViewGroup.LayoutParams(50, 50)); l = new CheckableLayout(Grid3.this); l.setLayoutParams(new GridView.LayoutParams(GridView.LayoutParams.WRAP_CONTENT, GridView.LayoutParams.WRAP_CONTENT)); l.addView(i); } else { l = (CheckableLayout) convertView; i = (ImageView) l.getChildAt(0); } ResolveInfo info = mApps.get(position); i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager())); return l; } public final int getCount() { return mApps.size(); } public final Object getItem(int position) { return mApps.get(position); } public final long getItemId(int position) { return position; } } public class CheckableLayout extends FrameLayout implements Checkable { private boolean mChecked; public CheckableLayout(Context context) { super(context); } public void setChecked(boolean checked) { mChecked = checked; setBackgroundDrawable(checked ? getResources().getDrawable(R.drawable.blue) : null); } public boolean isChecked() { return mChecked; } public void toggle() { setChecked(!mChecked); } } public class MultiChoiceModeListener implements GridView.MultiChoiceModeListener { public boolean onCreateActionMode(ActionMode mode, Menu menu) { mode.setTitle("Select Items"); mode.setSubtitle("One item selected"); return true; } public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return true; } public boolean onActionItemClicked(ActionMode mode, MenuItem item) { return true; } public void onDestroyActionMode(ActionMode mode) { } public void onItemCheckedStateChanged(ActionMode mode, int position, long id, boolean checked) { int selectCount = mGrid.getCheckedItemCount(); switch (selectCount) { case 1: mode.setSubtitle("One item selected"); break; default: mode.setSubtitle("" + selectCount + " items selected"); break; } } }}
實現了implements Checkable,然後可以設定GridView的多項選擇,但是無法相容低版本
後來自己琢磨發現瞭解決相容低版本的方法,見代碼
給GridView設定的Adapter
List<CodeGoodsListEntiy> goods = new ArrayList<CodeGoodsListEntiy>();public class CollectionAdapter extends BaseAdapter{@Overridepublic int getCount() {// TODO Auto-generated method stubreturn goods.size();}@Overridepublic Object getItem(int position) {// TODO Auto-generated method stubreturn position;}@Overridepublic long getItemId(int position) {// TODO Auto-generated method stubreturn position;}public void addDataList(List<CodeGoodsListEntiy> goodsList){goods.addAll(goodsList);}public void removeAllList(){goods.removeAll(goods);}public void removeData(CodeGoodsListEntiy entity){goods.remove(entity);}public List<CodeGoodsListEntiy> getList(){return goods;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubCheckableLayout layout = null;CodeGoodsListEntiy good = goods.get(position);if(convertView==null){layout = new CheckableLayout();convertView = inflater.inflate(R.layout.mycollection_griditem, null);layout.imgviewlayout = (RelativeLayout) convertView.findViewById(R.id.imgviewlayout);layout.iv = (ImageView) convertView.findViewById(R.id.iv);layout.price = (TextView) convertView.findViewById(R.id.price);layout.title = (TextView) convertView.findViewById(R.id.title);layout.sellnums = (TextView) convertView.findViewById(R.id.sells);layout.item_selectbtn = (ImageView) convertView.findViewById(R.id.item_selectbtn);layout.item_topview = (ImageView) convertView.findViewById(R.id.item_topview);convertView.setTag(layout);}else{layout = (CheckableLayout) convertView.getTag();}layout.price.setText("¥"+good.getSalePrice());layout.title.setText(good.getTitle());layout.sellnums.setText("月銷量"+good.getSellNums());layout.imgviewlayout.getLayoutParams().height = (SettingUtil.getDisplaywidthPixels() - SettingUtil.dip2px(8)) / 2;layout.iv.getLayoutParams().height = (SettingUtil.getDisplaywidthPixels() - SettingUtil.dip2px(10)) / 2;App.imageLoader.displayImage(good.getMainImg(), layout.iv, options, new SimpleImageLoadingListener());if(editModel){if(selecteditem.contains(position)){layout.setChecked(true);}else{layout.setChecked(false);}}else{layout.item_selectbtn.setVisibility(View.GONE);layout.item_topview.setVisibility(View.GONE);}return convertView;}}class CheckableLayout implements Checkable{View convertView;ImageView item_selectbtn;ImageView item_topview;ImageView iv;TextView price;TextView title;TextView sellnums;RelativeLayout imgviewlayout;private boolean mChecked = false;public CheckableLayout() {// TODO Auto-generated constructor stub}@Overridepublic void setChecked(boolean checked) {// TODO Auto-generated method stubmChecked = checked;if(item_topview!=null){if(mChecked){item_topview.setVisibility(View.GONE);}else{item_topview.setVisibility(View.VISIBLE);}}if(item_selectbtn!=null){if(mChecked){item_selectbtn.setVisibility(View.VISIBLE);}else{item_selectbtn.setVisibility(View.GONE);}}}@Overridepublic boolean isChecked() {// TODO Auto-generated method stubreturn mChecked;}@Overridepublic void toggle() {// TODO Auto-generated method stubsetChecked(!mChecked);}}
其實這裡class CheckableLayout implements Checkable類似於一般的Adapter裡的ViewHolder的類一樣的。
然後給GridView設定的ItemClickListener的方法
private OnItemClickListener onlvItemClick = new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3) {if(editModel){CheckableLayout holder = (CheckableLayout) arg1.getTag();if(selecteditem.contains(arg2)){selecteditem.remove((Integer)arg2);holder.setChecked(false);}else{selecteditem.add(arg2);holder.setChecked(true);}}else{ProDetailActivity.launch(MyCollectionActivity.this, goods.get(arg2).getItemId());}}};
其實這裡很關鍵的就是通過傳來的View得到那個ViewHolder類
CheckableLayout holder = (CheckableLayout) arg1.getTag();
或者用下面的代碼
View view = gv.getChildAt(arg2 - gv.getFirstVisiblePosition());
CheckableLayout holder = (CheckableLayout) view.getTag();
這裡一般的GridView或者ListView的BaseAdapter裡複用了convertView的話,GridView.getChildCount的數量少於BaseAdapter.getCount數量。只會顯示螢幕顯示出的數量,這是BaseAdapter用ViewHolder複用convertView的特點。
所以如果要擷取到單個itemview的話用上面的方法。
講到這裡吧,很多項目代碼涉及到商業性,有問題可以交流。這種方法需要注意細節就是了。
複製去Google翻譯翻譯結果
IE瀏覽器安全色性視圖怎解決gridview等控制項的樣式不相容?我搞了很久了,始終不行,先大家
IE8以下的瀏覽器不要去相容,難搞死了,常上網的人不會用那些瀏覽器的。做相容你可以去尋找關於css相容性的內容。
路由器版本太低,WIN7系統不相容,不可以對路由器進行設定,助
應該不是路由器版本的問題。
登入不上,是原來設定的網關,
在瀏覽器地址裡,沒有寫對。
你恢復出廠預設值後,
192.168.1.1試試不行就用192.168.0.1試試。