动态筛选标签页(类似评论筛选标签)

来源:互联网 发布:淘宝店铺seo有哪些 编辑:程序博客网 时间:2024/06/06 00:26

一个标签选择控件,类似于评价标签,已经实现点击事件选中效果,由于业务需要,我做的是使用ListView展示多个标签控件,并且listview的每个item中只能被选中一项,效果如下图

下面上代码

public class ScreenActivity extends BaseActivity implements View.OnClickListener{    ListView lv_container;    List<RespScreen> list;    WhoAroudApplication application;    Gson gson;    Button btn_affirm;    int checkFragment;    @Override    public void setupViewLayout() {        setContentView(R.layout.activity_screen);        application= (WhoAroudApplication) getApplication();        gson=application.gson;           }    @Override    public void initView() {        lv_container= (ListView) findViewById(R.id.lv_container);        btn_affirm= (Button) findViewById(R.id.btn_affirm);    }    @Override    public void listener() {        btn_affirm.setOnClickListener(this);    }    @Override    public void logicDispose() {           try {                 JSONObject aa=new JSONObject("{\"data\":[{\"title\":\"性别\",\"parameter\":\"sex\",\"content\":[{\"name\":\"不限\",\"value\":-1},{\"name\":\"\",\"value\":1},{\"name\":\"\",\"value\":0}]},{\"title\":\"年龄\",\"parameter\":\"age\",\"content\":[{\"name\":\"不限\",\"value\":-1},{\"name\":\"25岁以下\",\"value\":0},{\"name\":\"25-35岁\",\"value\":1},{\"name\":\"35岁以上\",\"value\":2}]},{\"title\":\"距离\",\"parameter\":\"distance\",\"content\":[{\"name\":\"不限\",\"value\":-1},{\"name\":\"5公里\",\"value\":5},{\"name\":\"10公里\",\"value\":10}]},{\"title\":\"认证\",\"parameter\":\"authentication\",\"content\":[{\"name\":\"不限\",\"value\":-1},{\"name\":\"实名认证\",\"value\":3},{\"name\":\"视频认证\",\"value\":4}]},{\"title\":\"类别\",\"parameter\":\"skillTypeid\",\"content\":[{\"name\":\"不限\",\"value\":-1},{\"name\":\"看电影\",\"value\":93},{\"name\":\"k歌\",\"value\":94},{\"name\":\"吃饭\",\"value\":95},{\"name\":\"下午茶\",\"value\":96},{\"name\":\"逛街\",\"value\":97},{\"name\":\"球类\",\"value\":98},{\"name\":\"美容\",\"value\":99},{\"name\":\"健身\",\"value\":100},{\"name\":\"教育\",\"value\":101},{\"name\":\"其它\",\"value\":102}]},{\"title\":\"费用\",\"parameter\":\"cost\",\"content\":[{\"name\":\"不限\",\"value\":-1},{\"name\":\"免费\",\"value\":0},{\"name\":\"收费\",\"value\":1}]}]}");                                    list=gson.fromJson(aa.optString("data"),new TypeToken<ArrayList<RespScreen>>(){}.getType());                 success();                 } catch (JSONException e) {                    e.printStackTrace();                }    }    private void success(){        lv_container.setAdapter(new CommonAdapter<RespScreen>(list,getApplicationContext(),R.layout.item_screen) {            @Override            public void convert(ViewHolderUtils holder, final RespScreen respScreen, int position) {                holder.setText(R.id.tv_tagTitle,respScreen.title!=null?respScreen.title:"");                TagCloudLayout tagCloudLayout=holder.getView(R.id.container);               final TagBaseAdapter mAdapter = new TagBaseAdapter(ScreenActivity.this,respScreen.content);                tagCloudLayout.setAdapter(mAdapter);                tagCloudLayout.setItemClickListener(new TagCloudLayout.TagItemClickListener() {                @Override                public void itemClick(int position) {                    for (int i=0;i<respScreen.content.size();i++){                        respScreen.content.get(i).isCheck=false;                    }                    respScreen.content.get(position).isCheck=true;                    mAdapter.notifyDataSetChanged();            }        });            }        });    }    @Override    public void onClick(View v) {        switch (v.getId()){            case R.id.btn_affirm:                List<CheckScreen> checkScreenList=filtrate();                if (checkScreenList!=null&&checkScreenList.size()>0){
     Toast.makeText(application, "当前被选中的标签"+gson.toJson(checkScreenList), Toast.LENGTH_SHORT).show();
}else{ Toast.makeText(application, "请选择筛选类型!", Toast.LENGTH_SHORT).show(); } break; } } /** * 筛选选中的标签,并放入新集合 */ private List<CheckScreen> filtrate(){ List<CheckScreen> checkScreenList=null; if (list!=null&&list.size()>0){ checkScreenList=new ArrayList<>(); for (int i=0;i<list.size();i++){ List<TagBean> tagBean=list.get(i).content; if (tagBean!=null&&tagBean.size()>0){ for (int j=0;j<tagBean.size();j++){ if (tagBean.get(j).isCheck){ CheckScreen checkScreen=new CheckScreen(); checkScreen.title=list.get(i).title; checkScreen.parameter=list.get(i).parameter; checkScreen.name=tagBean.get(j).name; checkScreen.value=tagBean.get(j).value; checkScreenList.add(checkScreen); } } } } } return checkScreenList; }}
public class TagBaseAdapter extends BaseAdapter {    private Context mContext;    private List<TagBean> mList;    public TagBaseAdapter(Context context,List<TagBean> list){        mContext=context;        mList=list;    }    @Override    public int getCount() {        return mList.size();    }    @Override    public Object getItem(int position) {        return mList.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        ViewHolder holder;        if (convertView == null) {            convertView = LayoutInflater.from(mContext).inflate(R.layout.tagview, null);            holder = new ViewHolder();            holder.tagBtn = (Button) convertView.findViewById(R.id.tag_btn);            convertView.setTag(holder);        }else{            holder = (ViewHolder)convertView.getTag();        }        TagBean bean = (TagBean) getItem(position);        holder.tagBtn.setTextSize(12);        holder.tagBtn.setText(bean.name);        if (bean.isCheck){            holder.tagBtn.setTextColor(mContext.getResources().getColor(R.color.orange));        }        return convertView;    }    static class ViewHolder {        Button tagBtn;    }}
布局文件item_screen
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"    xmlns:app="http://schemas.android.com/apk/res-auto"    android:orientation="vertical">    <LinearLayout        android:layout_width="match_parent"        android:layout_height="wrap_content"        android:layout_margin="10dp">        <TextView            android:id="@+id/tv_tagTitle"            android:layout_width="wrap_content"            android:layout_height="wrap_content"            android:textSize="@dimen/text_size_small"            android:textColor="@color/black"            android:layout_marginTop="10dp"            android:text="性别"/>        <com.zqlwl.whoAroud.view.screen.TagCloudLayout            android:id="@+id/container"            android:layout_width="match_parent"            android:layout_height="wrap_content"            app:tagSpacing="20dp"            app:lineSpacing="10dp"            android:layout_marginLeft="10dp"            />    </LinearLayout>    <View        android:layout_width="match_parent"        android:layout_height="1dp"        android:background="@color/gray"        android:layout_marginLeft="10dp"/></LinearLayout>
java bean
public class RespScreen implements Serializable{    @Expose    @SerializedName("title")    public String title;    @Expose    @SerializedName("parameter")    public String parameter;    @Expose    @SerializedName("content")    public List<TagBean> content;}
public class TagBean implements Serializable{    @Expose    @SerializedName("name")    public String name;    @Expose    @SerializedName("value")    public String value;    @Expose    @SerializedName("isCheck")    public boolean isCheck;}
public class CheckScreen {    @Expose    @SerializedName("title")    public String title;    @Expose    @SerializedName("parameter")    public String parameter;    @Expose    @SerializedName("name")    public String name;    @Expose    @SerializedName("value")    public String value;    @Expose    @SerializedName("isCheck")    public boolean isCheck;}
最后说一个CommonAdapter是一个万能adapter,我会在下一篇文章中单独介绍


0 0
原创粉丝点击