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不是一样的,如下图,列 ...
随机推荐
- Bootstrap<基础二十> 标签
Bootstrap 标签.标签可用于计数.提示或页面上其他的标记显示.使用 class .label 来显示标签,如下面的实例所示: <!DOCTYPE html> <html> ...
- VBA唏嘘戏——简单单元格的设定(实例)
由于有很多个Word文件,所以应用宏会更加方便排版,而且版式较为统一. Sub 设置列宽() ' ' 设置列宽宏 ' ' ActiveDocument.Tables().Cell(, ).Width ...
- React Native 一个组件styles BUG
'use strict'; var React = require('react-native'); var { StyleSheet, PanResponder, View, Text } = Re ...
- js动画之多物体运动
多个物体这不能使用一个定时器了,要给每个物体一个定时器 <!DOCTYPE html> <html lang="en"> <head> < ...
- JS日期类型处理
Date 操作日期和时间的对象 Date.getDate( ) 返回一个月中的某一天 Date.getDay( ) 返回一周中的某一天 Date.getFullYear( ) 返回Date对象的年份字 ...
- ubuntu 13.04 telnet 详细配置
1. sudo vi /etc/xinetd.d/telnet并加入以下内容:# default: on# description: The telnet server serves telnet s ...
- SQL Server中查询某个数据库中表的个数
--SQL Server中 数表: SELECT * FROM SYSOBJECTS WHERE xtype = 'U'; SELECT COUNT(*) FROM SYSOBJECTS WHERE ...
- 关于 DWZ 弹出框
1.弹出框 <a name="***" class="***" href="${** }/***.do?action=***&属性=${ ...
- VS.net中快捷键收缩和展开代码段 (转)
i. Ctrl-M-O 折叠所有方法 ii. Ctrl-M-P 展开所有方法并停止大纲显示(不可以再折叠了) iii. Ctrl-M-M 折叠或展开当前方法 iv. Ctrl-M-L展开所 ...
- 学习opencv之路(一)
先看一下<学习opencv> 找几个demo 学会相机标定 我做的是单目相机的标定.