可以展开的ListView实现
ONE Goal, ONE Passion !
昨天给一童鞋实现一个效果,不过他的效果又有了变化.效果如下:
可以看到如果使用ExpandableListView实现的话,确定键怎么实现,最右边的样式如何切换,都是无法简单实现的.还是使用其他笨方法吧.目前没有想到好的方法.我使用的是LinearLayout + listView + button 实现,既然是笨方法当然也不难喽,废话不多说,Come on.
使用ExpandableListView的详解:
http://blog.csdn.net/fengltxx/article/details/50451271
第1 步: 先写xml文件好啦
xml文件中我们大致效果展示出来,剩下的就是逻辑问题了.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.windowtest1.ExpandActivity">
<LinearLayout
android:id="@+id/ll"
android:layout_width="match_parent"
android:layout_height="40dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="样式"
android:textSize="25dp" />
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right"
android:text="吊坠"
android:textSize="25dp" />
</LinearLayout>
<ListView
android:id="@+id/lv"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<Button
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="确定" />
</LinearLayout>
第2步: 数据以及逻辑处理
public class ExpandActivity extends AppCompatActivity {
TextView tv;
ListView lv;
Button btn;
LinearLayout ll;
private String[] items = new String[]{"男", "女", "儿童"};
int selectItem_1 = 0; //记录选中的是哪一像
List<View> mList; //集合 用于存放被点击view
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_expand);
ll = (LinearLayout) findViewById(R.id.ll);
tv = (TextView) findViewById(R.id.tv);
lv = (ListView) findViewById(R.id.lv);
btn = (Button) findViewById(R.id.btn);
mList = new ArrayList<>();
adapter = new myAdapter();
lv.setAdapter(adapter);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//将被点击的view存放如集合
mList.add(view);
// 逻辑判断 : 如果点击了一次就显示 "对号图标"
if (mList.size() == 1) {
mList.get(0).findViewById(R.id.iv).setVisibility(View.VISIBLE);
} else { // 如果点击了多次(即点击了多次去选择)我们只让最后点击的那个显示选中
for (int i = 0; i < mList.size() - 1; i++) {
mList.get(i).findViewById(R.id.iv).setVisibility(View.GONE);
}
mList.get(mList.size() - 1).findViewById(R.id.iv).setVisibility(View.VISIBLE);
}
// 记录下选中的是那一个
selectItem_1 = position;
}
});
//点击确定后将ListView隐藏
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
tv.setText(items[selectItem_1]);
lv.setVisibility(View.GONE);
btn.setVisibility(View.GONE);
}
});
//点击分组栏展开LIstView
ll.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
lv.setVisibility(View.VISIBLE);
btn.setVisibility(View.VISIBLE);
//重置adapter( 要不会显示上次选中项)
adapter.notifyDataSetChanged();
}
});
}
myAdapter adapter;
public class myAdapter extends BaseAdapter {
@Override
public int getCount() {
return items.length;
}
@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) {
viewHolder holder;
if (convertView == null) {
holder = new viewHolder();
convertView = getLayoutInflater().inflate(R.layout.item, null);
holder.tv = (TextView) convertView.findViewById(R.id.tv_left);
holder.iv = (ImageView) convertView.findViewById(R.id.iv);
convertView.setTag(holder);
} else {
holder = (viewHolder) convertView.getTag();
}
holder.tv.setText(items[position]);
return convertView;
}
}
public class viewHolder {
TextView tv;
ImageView iv;
}
}
item.xml文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/tv_left"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:hint="类型" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="right">
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/status_online"
android:visibility="gone" />
</LinearLayout>
</LinearLayout>
运行效果就是上图喽.give me five.完成.