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;
ListView只允许展开其中一个item的方法的更多相关文章
- 解决ListView在界面只显示一个item
ListView只显示一条都是scrollview嵌套listView造成的,将listView的高度设置为固定高度之后,三个条目虽然都完全显示.但是这个地方是动态显示的,不能写死.故采用遍历各个子条 ...
- 解决lScrollView嵌套ListView只显示一行的问题,listvie显示全部的item
ScrollView嵌套ListView只显示一行的问题 1.思路:给listview重新添加一个高度. listview的高度==listview.item的高度之和. 2.注意:关键是添加list ...
- Android 点击ListView(或GridView)的一个item,使其里面textview变色,点击另一个这个恢复原来颜色
今天作一个项目,就是做视频app,如果电视剧的话有许多剧集,点击一个item,播放不同的剧集,要有点击效果,并且默认是选择第一个.花费了一段时间,自己觉得有点难 度,现在和大家分享一下,下面是效果显示 ...
- listview当选中某一个item时设置背景色其他的不变
listview当选中某一个item时设置背景色其他的不变: 可以使用listview.setOnFoucsChangeListener(listener) ; /** * listview获得焦点和 ...
- 解决“listView点击一个Item,另外几个Item也跟着改变”的问题
如图所看到的: 我点击Item,右边的checkBox就会对应的变化.可是当我第一次做的时候.点击第一个Item,右边的checkBox变为绿色,可是当我listView往下拉的时候,发现以下也有是绿 ...
- recyclerview23+出现多个item只显示第一个item的问题
1.改成21+可以,如果不行,就使用第2或第3个解决方案 2.对每个item的inflate,传入两个参数,第二个参数设置为null,而不是使用3个参数(第二个parent,第三个false) 3.i ...
- Android Animation动画实战(一): 从布局动画引入ListView滑动时,每一Item项的显示动画
前言: 之前,我已经写了两篇博文,给大家介绍了Android的基础动画是如何实现的,如果还不清楚的,可以点击查看:Android Animation动画详解(一): 补间动画 及 Android An ...
- 从tabBarController的一个item上的控制器跳转到另一个item上的控制器
先从习惯性的tabBarController开始,很多应用的外框都是用这个开始的,而从tabBarController的一个item上的控制器跳转到另一个上的,往往都是直接通过点击tabBar上的不同 ...
- Android ListView实现不同item的方法和原理分析
ListView实现不同item的方法和原理分析 一问题抛出Listview是android里面的重要组件,用来显示一个竖向列表,这个没有什么问题:但是有个时候列表里面的item不是一样的,如下图,列 ...
随机推荐
- cygwin下载指南(转)
http://blog.chinaunix.net/uid-20178959-id-1731456.html
- windows7 64位系统pl/sql 客户端的安装
解压将下载到的将其解压,如我解压到了 E:\app\instantclient_11_2 3.设置PLSQL Developer在tools-prefrences,conncetion,OCI lib ...
- Visual Studio 2015 Update 3 ISO
http://download.microsoft.com/download/c/2/6/c26892d8-6a5d-4871-9d46-629f4d430146/vs2015.3.vsu.iso
- 源码编译安装 MySQL 5.5.x 实践
1.安装cmakeMySQL从5.5版本开始,通过./configure进行编译配置方式已经被取消,取而代之的是cmake工具.因此,我们首先要在系统中源码编译安装cmake工具. # wget ht ...
- 《java小应用程序(Applet)和java应用程序(Application)分别编写的简单计算器》
Application和Java Applet的区别.Java语言是一种半编译半解释的语言.Java的用户程序分为两类:Java Application和Java Applet.这两类程序在组成结构和 ...
- ListView.post(Runnable {})和ListView.postDelayed
1. boolean android.view.View.post(Runnable action): 是listview 继承 view,同样具有此方法 post(Runnable action) ...
- Allegro padstack
在ALLEGRO中,建立PCB封装是一件挺复杂的事,而要建立FOOTPRINT,首先要有一个PAD,所以就要新建PADSTACK. 焊盘可以分两种,表贴焊盘和通孔焊盘,表贴焊盘结构相对简单,下面首先分 ...
- Webdriver设置Chrome属性
1. ChromeDriver加载插件 File file = new File ("files\\youtube.crx"); ChromeOptions options = n ...
- 关于解析P D X P 协议的心得
1一个线程进队Quee 一个线程出队 也应该lock,不然会出错. 2 委托的效率较低 能不用委托的地方,尽量不要用委托. 在一个线程中需要调用控件时采用委托. 3 for循环中异步发送数据不能保证发 ...
- vector容器使用和assert断言关键字
C++里面的容器是个比较复杂的东西,我这篇只说vector容器怎么使用,详细的网搜. vector模板类其实是一个动态数组,跟自己用new关键字创建数组一样,只不过vector会自动帮我们用new和d ...