两个关联的GridView,点击其中一个,另一个的状态发生变化,联动操作
2017-10-30 15:05
555 查看
最近做了个练习,为某个用户设置标签,标签页下方是可供选择的所有标签,上方是选中的标签,点击所有标签中的一项,上方列表显示相应的选项,点击上方列表中的一项,删除该项,下方所有标签列表中的该项呈未选中状态。如图所示:页面代码:
package com.example.castedemo.user; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.View; import android.widget.AdapterView; import android.widget.Button; import android.widget.GridView; import android.widget.RelativeLayout; import com.example.castedemo.R; import com.example.castedemo.family.adapter.NewTagAdapter; import com.example.castedemo.family.adapter.TagAdapter; import com.example.castedemo.user.bean.TagBean; import java.util.ArrayList; import java.util.List; import butterknife.BindView; import butterknife.ButterKnife; import butterknife.OnClick; public class UserTagActivity extends Activity { private static final String TAG = "UserTagActivity"; @BindView(R.id.gv_addedTag) GridView gvAddedTag; @BindView(R.id.gv_allTag) GridView gvAllTag; // @BindView(R.id.iv_back) // ImageView ivBack; // @BindView(R.id.rl_bottom) // RelativeLayout rlBottom; String[] allTags = {"推荐", "热点", "视频", "图片", "段子", "社会", "娱乐", "科技"}; NewTagAdapter tagAdapter; @BindView(R.id.btn_tagCancel) Button btnTagCancel; @BindView(R.id.btn_tagSave) Button btnTagSave; Context mContext; List<String> selTags = new ArrayList<String>(); List<TagBean> tagBeen = new ArrayList<TagBean>(); List<TagBean> selTagBeans = new ArrayList<TagBean>(); NewTagAdapter selTagAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_user_tag); ButterKnife.bind(this); mContext = UserTagActivity.this; initData(); initSelData(); } public void initData() { for(int i=0;i<allTags.length;i++){ TagBean bean = new TagBean(); bean.setTag(allTags[i]); bean.setSel(false); tagBeen.add(bean); } tagAdapter = new NewTagAdapter(mContext,tagBeen); gvAllTag.setAdapter(tagAdapter); gvAllTag.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TagBean tagBean = tagBeen.get(position); Log.e(TAG,"tagName="+tagBean.getTag()+","+tagBean.isSel()); if(tagBean.isSel()){ tagBean.setSel(false); selTagBeans.remove(tagBean); }else{ tagBean.setSel(true); selTagBeans.add(tagBean); } tagAdapter.notifyDataSetChanged(); selTagAdapter.notifyDataSetChanged(); } }); } public void initSelData(){ if(getIntent().getStringExtra("selTag") != null){ String tags = getIntent().getStringExtra("selTag"); String[] saveTag = tags.split(",");
//将选中的标签列表设置成与所有标签相同的数据结构 for(int i=0;i<saveTag.length;i++){ for(int j=0;j<tagBeen.size();j++){ TagBean bean = tagBeen.get(j); if(saveTag[i].equals(bean.getTag())){ bean.setSel(true); selTagBeans.add(bean); } } } } selTagAdapter = new NewTagAdapter(mContext,selTagBeans); gvAddedTag.setAdapter(selTagAdapter); gvAddedTag.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { TagBean bean = selTagBeans.get(position); bean.setSel(false); selTagBeans.remove(position); selTagAdapter.notifyDataSetChanged(); tagAdapter.notifyDataSetChanged(); } }); } @OnClick({R.id.btn_tagCancel, R.id.btn_tagSave}) public void onClick(View view) { switch (view.getId()) { case R.id.btn_tagCancel: finish(); break; case R.id.btn_tagSave: String passTags = ""; for(int i=0;i<selTagBeans.size();i++){ // passTags[i] = selTagBeans.get(i).getTag(); if(selTagBeans.size()-1 == i){ passTags += selTagBeans.get(i).getTag(); }else{ passTags += selTagBeans.get(i).getTag()+","; } } Intent userIntent = new Intent(); userIntent.putExtra("tag",passTags); setResult(RESULT_OK,userIntent); finish(); break; } } }
适配器代码:
package com.example.castedemo.family.adapter;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ImageView;import android.widget.TextView;import com.example.castedemo.R;import com.example.castedemo.user.bean.TagBean;import java.util.List;import butterknife.BindView;import butterknife.ButterKnife;/*** Created by wangchm on 2017/10/26 0026.* 偏好标签页*/public class NewTagAdapter extends BaseAdapter {private static final String TAG = "TagAdapter";private Context mContext;private List<TagBean> tagBeen;public NewTagAdapter(Context mContext, List<TagBean> tagBeen) {this.mContext = mContext;this.tagBeen = tagBeen;}@Overridepublic int getCount() {return tagBeen == null ? 0 : tagBeen.size();}@Overridepublic Object getItem(int position) {return position;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {convertView = LayoutInflater.from(mContext).inflate(R.layout.tag_item, null);holder = new ViewHolder(convertView);convertView.setTag(holder);}else{holder = (ViewHolder) convertView.getTag();}TagBean bean = tagBeen.get(position);if(bean.isSel()){holder.ivCheck.setVisibility(View.VISIBLE);}else{holder.ivCheck.setVisibility(View.GONE);}holder.tvTag.setText(bean.getTag());return convertView;}static class ViewHolder {@BindView(R.id.tv_tag)TextView tvTag;@BindView(R.id.iv_tagCheck)ImageView ivCheck;ViewHolder(View view) {ButterKnife.bind(this, view);}}}子项布局:
<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="vertical" android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:id="@+id/tv_tag"android:padding="10dp"android:text="推荐"android:layout_marginTop="5dp"android:layout_marginRight="5dp"android:background="@drawable/border_gray_style"android:textColor="@color/text_white"android:layout_width="match_parent"android:layout_height="match_parent" /><ImageViewandroid:id="@+id/iv_tagCheck"android:visibility="gone"android:layout_alignRight="@+id/tv_tag"android:layout_alignTop="@+id/tv_tag"android:layout_marginTop="-5dp"android:layout_marginRight="-5dp"android:src="@drawable/delete_check"android:layout_width="18dp"android:layout_height="18dp" /></RelativeLayout>
相关文章推荐
- 使用tabhost,相邻的两个片段,点击其中一个,另一个再打开就显示空白
- 点击ComboBox控件的一个选项另一个ComboBox的内容发生相应变化
- SQl trigger 有两个表,其中一个表的数据变化,同时要影响到另一个表
- laydate日期插件,两个文本框关联,点击一个文本框日期,另一个文本框日期自动加天数
- 两个关联表如何更新其中的一个
- 两个整数序列,其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 比较两个字符串 看其中一个字符串再另一个字符串中出现的次数
- 微软算法100道题-------输入两个整数序列。其中一个序列表示栈的push顺序, 判断另一个序列有没有可能是对应的pop顺序。
- 两个ListView联动 嵌套一个gridview的使用
- 有三个页面,当点击其中一个另两个隐藏
- mysql 两个关联表如何更新其中一个表的数据
- Oracle两个关联表的数据,把一个表的某一列数据复制到另一个表上
- 在Android中ListView中添加两个点击事件,一个是OnItemClick,另一个是一个图片的OnClick事件
- 在小工具中维护状态(在一个浏览器里同时登陆两个账号同时进行操作的实现)
- 小算法:给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串s首先
- 如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。其中内存只有1G。
- 两个div,知道其中一个div的高度或宽度,怎么使另一个div占满剩余的部分.
- 两个关联表如何更新其中一个表的数据
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- 题目:输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。