使用listview的展开和收起效果

本文介绍了一种简单实现ListView展开和收起效果的方法,避免使用复杂的ExpandableListView。通过在布局中结合Button和ListView,利用点击Button控制ListView的显示和隐藏,达到类似ExpandableListView的功能。虽然这种方法代码冗余较多,但易于实现。
摘要由CSDN通过智能技术生成

在实际项目中,许多地方都会用到类似ExpandableListView的效果,但是实际使用ExpandableListView的时候比较复杂,而且这个控件展开的时候会改变它的下标。比如: 点击展开第二项的子item时,子item的第一个下标为2,这样计算点击事件就比较复杂。 所以我想了思路比较的简单的,比较容易实现的方法。
大概思路是这样的:在布局中使用一个button加一个listview作为一个整体,设置listview为隐藏。然后点击button就设置listview可见,这样就基本实现ExpandableListView的功能。 只是这个方法比较笨,代码冗余比较多,还请多多包涵。
效果如下

package com.example.exapmples;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.Transformation;
import android.widget.AdapterView;
import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.RadioButton;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;


public class MainActivity extends Activity implements View.OnClickListener{
   
    private ListView listView1,listView2,listView3;
    private ImageView img1,img2,img3;
    private TextView textview1 ,textview2,textview3;
    private RelativeLayout relative1,relative2,relative3;
    private List<String> list=new ArrayList<String>();
    private MyAdapter adapter;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
    }

    private void initView() {
        listView1= (ListView) findViewById(R.id.list1);
        listView2= (ListView) findViewById(R.id.list2);
        listView3= (ListView) findViewById(R.id.list3);
        img1= (ImageView) findViewById(R.id.img1);
        img2= (ImageView) findViewById(R.id.img2);
        img3= (ImageView) findViewById(R.id.img3);
        textview1= (TextView) findViewById(R.id.textview1);
        textview2= (TextView) findViewById(R.id.textview2);
        textview3= (TextView) findViewById(R.id.textview3);
        relative1= (RelativeLayout) findViewById(R.id.relative1);
        relative2= (RelativeLayout) findViewById(R.id.relative2);
        relative3= (RelativeLayout) findViewById(R.id.relative3);
        relative1.setOnClickListener(this);
        relative2.setOnClickListener(this);
        relative3.setOnClickListener(this);

        for (int i =0 ; i < 5 ; i++){
            list.add("item"+i);
        }
        adapter =new MyAdapter(this,list);
        listView1.setAdapter(adapter);
        listView2.setAdapter(adapter);
        listView3.setAdapter(adapter);

        listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                click1(parent,view ,position);
            }
        });
        listView2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                click2(parent,view ,position);
            }
        });
        listView3.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                click3(parent,view ,position);
            }
        });
    }

    private int clickposition1 =-1 ,clickposition2 =-1,clickposition3 =-1;
    private void click1(AdapterView<?> parent, View view, int position){
        RadioButton rb = (RadioButton) view.findViewById(R.id.rd);
        if (rb != null) {
            rb.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.enlarge_out));
            if (clickposition1 == position){
                if (rb.isChecked()){
                    rb.setChecked(false);
                    Toast.makeText(this,"取消第"+position+"项",Toast.LENGTH_SHORT).show();
                } else{
                    rb.setChecked(true);
                    Toast.makeText(this,"选中第"+position+"项",Toast.LENGTH_SHORT).show();
                }
            }
            else{
                clickposition1 = position;
                //这个相当于listview中checkbox的单选,还比较方便
                rb.setChecked(true);
                Toast.makeText(this,"选中第"+position+"项",Toast.LENGTH_SHORT).show();
                for (int i = 0; i < parent.getChildCount(); i++) {
                    if (i != position) {
                        View v = parent.getChildAt(i);
                        if (v != view) {
                            RadioButton iv2 = (RadioButton) v
                                    .findViewById(R.id.rd);
                            iv2.startAnimation(AnimationUtils.loadAnimation(MainActivity.this, R.anim.small_out));
                            iv2.setChecked(false);
                        }else{
                        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值