zoukankan      html  css  js  c++  java
  • ListView只允许展开其中一个item的方法

    xml文件代码:

    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <RelativeLayout
    android:id="@+id/relativelayout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_below="@id/image">

    <LinearLayout
    android:id="@+id/line1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:visibility="gone">

    <TextView
    android:id="@+id/text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:padding="5dp"
    android:text="我是文字 要被隐藏" />
    </LinearLayout>
    </RelativeLayout>

    <ImageView
    android:id="@+id/image"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@mipmap/ic_launcher" />
    </RelativeLayout>

    java代码:

    public class MainActivity extends AppCompatActivity {
    ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    listview = (ListView) findViewById(R.id.listview);
    }

    public static int position;
    public static boolean isShow = true;
    @Override
    protected void onStart() {
    super.onStart();
    myAdapter = new MyAdapter();
    listview.setAdapter(myAdapter);
    listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    if(MainActivity.position == position){
    MainActivity.isShow = false;
    MainActivity.position = 99999999;
    }else{
    MainActivity.isShow = true;
    MainActivity.position = position;
    }
    int childCount = ((RelativeLayout) view).getChildCount();
    if(myAdapter.getView() != null){
    myAdapter.getView().setVisibility(View.GONE);
    }
    for (int i = 0; i < childCount; i++) {
    int relativelayout = R.id.relativelayout; //要隐藏布局的外层一个容器ID
    int id1 = ((RelativeLayout) view).getChildAt(i).getId();
    if(relativelayout == id1){//如果是要隐藏布局的外层一个容器 就循环寻找要隐藏的容器
    RelativeLayout childAt = (RelativeLayout) ((RelativeLayout) view).getChildAt(i);
    int childCount1 = childAt.getChildCount();
    for (int j = 0; j < childCount1; j++) {
    int line1 = R.id.line1;
    int id2 = childAt.getChildAt(j).getId();
    if(line1 == id2){
    if(MainActivity.isShow){
    childAt.getChildAt(j).setVisibility(View.VISIBLE);
    }else {
    childAt.getChildAt(j).setVisibility(View.GONE);
    }
    if(childAt.getChildAt(j).getVisibility() == View.INVISIBLE){
    Log.e("eee","出现这个日志,请检查你的类型转换,和xml结构是否符合当前的代码。");
    }
    myAdapter.setView((LinearLayout) childAt.getChildAt(j));
    }
    }
    }
    }

    }
    });
    }



    MyAdapter myAdapter;

    class MyAdapter extends BaseAdapter {
    LinearLayout view; //要隐藏或者展示的view ——如果是多个,可以修改为一个Entity
    public LinearLayout getView(){
    return view;
    }
    public void setView(LinearLayout view){
    this.view = null;
    this.view = view;
    }
    @Override
    public int getCount() {
    return 7;
    }

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

    @Override
    public long getItemId(int position) {
    return 0;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
    final ViewHolder vh;
    if (convertView == null) {
    vh = new ViewHolder();
    convertView = View.inflate(MainActivity.this, R.layout.item, null);
    vh.image = (ImageView) convertView.findViewById(R.id.image);
    vh.text = (TextView) convertView.findViewById(R.id.text);
    convertView.setTag(vh);
    } else {
    vh = (ViewHolder) convertView.getTag();
    }
    return convertView;
    }

    class ViewHolder {
    ImageView image;
    TextView text;
    }
    }
    }

    耦合度很高,只要布局文件里面的结构改变,onItemClick的代码就要改。。。。

    15:38更新一次:添加了,当点击同一个两次,第二次应该要GONE;

  • 相关阅读:
    response.redirect on asp.net is a 302 jump action
    什么吃掉了我的硬盘?
    百度流量统计将会影响搜索的排名
    发邮件 python
    bottle template usage
    想提神,喝中药,咖啡可可没用的
    企业退信的常见问题?
    用UnixBench测试VPS性能 判别是否值得购买
    域名注册及免费空间and企业邮箱
    LNMP一键安装包是什么?
  • 原文地址:https://www.cnblogs.com/yaxiaoke/p/6061494.html
Copyright © 2011-2022 走看看