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:layout_below="@id/image"
        android:id="@+id/relativelayout"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <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);
    }

    @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) {
                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){
                                childAt.getChildAt(j).setVisibility(View.VISIBLE);
                                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的代码就要改。。。。

时间: 2024-10-12 03:45:04

ListView只允许展开其中一个item的方法的相关文章

怎样获得listview的第一个item?

============问题描述============ 想对一个listview的第一行高亮显示. 用listview.getchildat(0)是可以,但是当数据较多时,下一页的第一行也被高亮了,求解决! ============解决方案1============ 对List的Adapter经行定制 ============解决方案2============ 引用 4 楼 jjack7 的回复: Quote: 引用 1 楼 youmingdot 的回复: 对List的Adapter经行定制

android listView 的最后一个item显示(菜鸟新手,老鸟勿喷)

问题:一个listView显示不满全屏时,最后一个item会自动占满剩下的屏幕高度,而我们需要看到的是每个item布局所要占的高度一样. 解决办法:主要是把ListView布局里面的高度设置为:android:layout_height="fill_parent" : listView显示的每个item就占同样的高度了.

listview当选中某一个item时设置背景色其他的不变

listview当选中某一个item时设置背景色其他的不变: 可以使用listview.setOnFoucsChangeListener(listener) ; /** * listview获得焦点和失去焦点时背景颜色的变化 * @author long * */ private class MyOnFocusChangeListener implements OnFocusChangeListener{ @Override public void onFocusChange(View v, b

Android 点击ListView(或GridView)的一个item,使其里面textview变色,点击另一个这个恢复原来颜色

今天作一个项目,就是做视频app,如果电视剧的话有许多剧集,点击一个item,播放不同的剧集,要有点击效果,并且默认是选择第一个.花费了一段时间,自己觉得有点难 度,现在和大家分享一下,下面是效果显示: 这个类是例子主类: <span style="font-size:14px;">public final class MainActivity extends Activity { private GridView gridView; private ArrayList&l

解决“listView点击一个Item,另外几个Item也跟着改变”的问题

如图所示: 我点击Item,右边的checkBox就会相应的变化,但是当我第一次做的时候,点击第一个Item,右边的checkBox变为绿色,但是当我listView往下拉的时候,发现下面也有是绿色的checkBox,很显然我是没有点击下面的.那么这个问题应该怎么解决呢,下面是我解决的方法: 首先是Item的布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=

判断最后listView中最后一个item是否完全显示出来

/** * 判断最后listView中最后一个item是否完全显示出来 * listView 是集合的那个ListView * @return true完全显示出来,否则false */ protected boolean isLastItemVisible() { final Adapter adapter1 = listView.getAdapter(); if (null == adapter || adapter.isEmpty()) { return true; } final int

Android的ListView的每一个Item都有不同的布局

大家都知道,ListView中的数据是经过adapter适配到屏幕上的,所以要实现listview中每一个item的内容需要去操作adapter中的代码: 在使用不同布局的时候我们要重构以下两个方法:getItemViewType和getViewTypeCount. public class MyAdapter extends BaseAdapter { ArrayList<String> ls; Context mContext; LinearLayout linearLayout = nu

recyclerview23+出现多个item只显示第一个item的问题

1.改成21+可以,如果不行,就使用第2或第3个解决方案 2.对每个item的inflate,传入两个参数,第二个参数设置为null,而不是使用3个参数(第二个parent,第三个false) 3.item的根部局高度不要设置为相对的(match_parent或wrap_content),要设置为具体的高度就ok了 4.23+可能不是不加载,只是每个item都占满了一屏,往后拉可以看到下一个item

Listview或者GridView嵌套在ScrollView中只显示一行item解决方法。

页面里有ListView(GridView)和一些固定布局让他们一起在整个屏幕上滚动方法: (1)自定义ListView(GridView),重写onMeasure()方法,我以GridView为例(ListView只需要extends ListView)具体代码如下: package top.ant.view; import android.content.Context; import android.util.AttributeSet; import android.widget.Grid