【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:layout_width="match_parent"
android:layout_height="wrap_content" />