[scrollview嵌套listview]安卓中ListView中嵌套ListView的例子

更新时间:2020-09-25    来源:安卓教程    手机版     字体:

【www.bbyears.com--安卓教程】


平常我们使用ListView已是司空见惯,但是当ListView的item也是一个ListView的时候就显得有些棘手了,或是遇到数据加载显示不出来,或是遇到只加载一个item,或是遇到滑动混乱数据混乱等等问题,我想说的是ListView的item要使用自定义的ListView就可以解决这一系列问题。

MainActivity:

package zm.listviewnesting;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

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


public class MainActivity extends Activity {
    private ListView list_one;
    private AreaAdapter areaAdapter;
    private List areaEneities = new ArrayList();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list_one = (ListView) findViewById(R.id.list_one);

        for (int i = 0; i < 10; i++) {
            AreaEntity areaEntity = new AreaEntity(i + "", "大众");
            areaEneities.add(areaEntity);
        }

        getdata();
    }

    private void getdata() {
        areaAdapter = new AreaAdapter(areaEneities, this);
        list_one.setAdapter(areaAdapter);
    }

    class AreaAdapter extends BaseAdapter {

        private List areaEneity;
        private LayoutInflater mInflater;
        private Context mContext;

        public AreaAdapter(List areaEneities, Context context) {
            super();
            this.areaEneity = areaEneities;
            this.mInflater = LayoutInflater.from(context);
            this.mContext = context;
        }


        @Override
        public int getCount() {
            return areaEneity.size();
        }

        @Override
        public Object getItem(int position) {
            return areaEneity.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {


            ViewHolder holder;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.item_list_one, null);
                holder = new ViewHolder();
                holder.tv_car = (TextView) convertView.findViewById(R.id.tv_car);
                holder.list_two = (MyListView) convertView.findViewById(R.id.list_two);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            holder.tv_car.setText(areaEneity.get(position).getArea());

            List areaEneities = new ArrayList();
            AreaAdapterTwo areaAdapter = new AreaAdapterTwo(areaEneities, mContext);
            holder.list_two.setAdapter(areaAdapter);

            for (int i = 0; i < 3; i++) {
                AreaEntity areaEntity = new AreaEntity(i + "", "L15");
                areaEneities.add(areaEntity);
            }
            return convertView;
        }

        class ViewHolder {
            private TextView tv_car;
            private MyListView list_two;
        }
    }


    class AreaAdapterTwo extends BaseAdapter {

        private List areaEneity;
        private LayoutInflater mInflater;
        private Context mContext;

        public AreaAdapterTwo(List areaEneities, Context context) {
            super();
            this.areaEneity = areaEneities;
            this.mInflater = LayoutInflater.from(context);
            this.mContext = context;
        }


        @Override
        public int getCount() {
            return areaEneity.size();
        }

        @Override
        public Object getItem(int position) {
            return areaEneity.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {


            ViewHolder holder;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.item_list_two, null);
                holder = new ViewHolder();
                holder.tv_count = (TextView) convertView.findViewById(R.id.tv_count);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

            holder.tv_count.setText(areaEneity.get(position).getArea());
            return convertView;
        }

        class ViewHolder {
            private TextView tv_count;
        }
    }

}

自定义ListView:=====MyListView:

package zm.listviewnesting;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.ListView;

/**
 * 作者:joy on 2015/11/27 10:23
 */
public class MyListView extends ListView {
    public MyListView(Context context) {
        super(context);
    }

    public MyListView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyListView(Context context, AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
                MeasureSpec.AT_MOST);
        super.onMeasure(widthMeasureSpec, expandSpec);

    }
}

直接在布局文件中引用就可以了,注意包名:

    android:id="@+id/list_two"
    android:layout_width="match_parent"
    android:layout_height="wrap_content" />

本文来源:http://www.bbyears.com/shoujikaifa/100838.html

热门标签

更多>>

本类排行