可以展开的ListView实现

可以展开的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.完成.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值