GridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE_MODAL)不相容低版本系統解決方案,setchoicemode

來源:互聯網
上載者:User

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試試。
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.