问题:
listview嵌套listview,会显示不全。
解决办法:
/**
* 设置Listview的高度
*/
public void setListViewHeight(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
示例demo:
package com.example.administrator.mylistviewpager;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.TextView;
import java.util.ArrayList;
import java.util.List;
import butterknife.BindView;
import butterknife.ButterKnife;
public class ListviewActivity extends AppCompatActivity {
@BindView(R.id.tv)
TextView tv;
@BindView(R.id.lv)
ListView lv;
private List<ListView> list = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mainii);
ButterKnife.bind(this);
tv.setText("listview嵌套listview");
for (int i = 0; i < 3; i++) {
list.add(new ListView(this));
}
MyListViewAdapter adapter = new MyListViewAdapter(list);
lv.setAdapter(adapter);
}
class MyListViewAdapter extends BaseAdapter {
private List<ListView> list = new ArrayList<>();
public MyListViewAdapter(List<ListView> list) {
this.list = list;
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.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 = getLayoutInflater().inflate(R.layout.listview_itemii, parent, false);
holder = new ViewHolder(convertView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
holder.tv1.setText("我是第" + position + "个listview");
ArrayList<String> list1 = new ArrayList<>();
for (int i = 0; i < 20; i++) {
list1.add("item====" + i);
}
ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(ListviewActivity.this, R.layout.listview_item, R.id.tv, list1);
holder.lv2.setAdapter(arrayAdapter);
setListViewHeight(holder.lv2);
return convertView;
}
/**
* 设置Listview的高度
*/
public void setListViewHeight(ListView listView) {
ListAdapter listAdapter = listView.getAdapter();
if (listAdapter == null) {
return;
}
int totalHeight = 0;
for (int i = 0; i < listAdapter.getCount(); i++) {
View listItem = listAdapter.getView(i, null, listView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight();
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1));
listView.setLayoutParams(params);
}
class ViewHolder {
@BindView(R.id.tv1)
TextView tv1;
@BindView(R.id.lv_2)
ListView lv2;
ViewHolder(View view) {
ButterKnife.bind(this, view);
}
}
}
}
主界面布局:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
tools:context=".MainActivityI">
<TextView
android:id="@+id/tv"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="20sp"
android:text="viewpager是listview的一个item,可以一起滑动"/>
<ListView
android:id="@+id/lv"
android:background="@color/colorAccent"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/tv" />
</RelativeLayout>
主界面 外层listview的item布局
<?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="wrap_content"
android:orientation="vertical"
tools:context=".MainActivityI">
<TextView
android:id="@+id/tv1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:text="hahhaha"
android:textSize="25sp" />
<ListView
android:id="@+id/lv_2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimary" />
</LinearLayout>
内层listview的item布局:
<?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="wrap_content"
android:orientation="vertical"
tools:context=".MainActivityI">
<TextView
android:id="@+id/tv"
android:gravity="center"
android:textSize="30sp"
android:background="@color/colorAccent"
android:textColor="#000000"
android:text="我是一个text"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</LinearLayout>