Androidは、ScrollViewにListViewを1つ追加し、ListViewコンテンツが不完全(常に1つ目を表示する)に表示される問題の2つの簡単な解決策について
4182 ワード
そうですか.
次のようなニーズがあります.
1.画面が表示されます.画面にはリスト(ListView)があり、リストの上にスクロール可能なポスターがあります.
2.ListViewのスクロール中に、ListView上のポスターをListViewに従ってスクロールすることも要求されます.
デルの一般的なソリューション:
1.このListViewをScrollViewでネストします.
はい、このようなレイアウト自体は大丈夫ですよ.しかし、問題が来て、あなたのインタフェースを実行していると、突然、あなたのリストには多くの項目があるのに、どうして1つしか表示されていないのですか?よくチェックすると、リストに1つだけ表示されるのではなく、他の項目がレイアウト自体に隠されていることがわかります.
どうしようかな?次の2つの比較的簡単な解決策を示します.
1つ目:ListViewのスクロールを無効にします.
2つ目は、ListViewの各項目の高さを計算し、各項目の高さに乗じた項目数から、ListViewの総高さを算出することです.
次に、第1の方法のコードを示します.
2つ目の方法のコードは次のとおりです.
ここまでで問題は終わります.もしどの友达がもっと良い解決方法があれば、分かち合うことを忘れないでください.
次のようなニーズがあります.
1.画面が表示されます.画面にはリスト(ListView)があり、リストの上にスクロール可能なポスターがあります.
2.ListViewのスクロール中に、ListView上のポスターをListViewに従ってスクロールすることも要求されます.
デルの一般的なソリューション:
1.このListViewをScrollViewでネストします.
はい、このようなレイアウト自体は大丈夫ですよ.しかし、問題が来て、あなたのインタフェースを実行していると、突然、あなたのリストには多くの項目があるのに、どうして1つしか表示されていないのですか?よくチェックすると、リストに1つだけ表示されるのではなく、他の項目がレイアウト自体に隠されていることがわかります.
どうしようかな?次の2つの比較的簡単な解決策を示します.
1つ目:ListViewのスクロールを無効にします.
2つ目は、ListViewの各項目の高さを計算し、各項目の高さに乗じた項目数から、ListViewの総高さを算出することです.
次に、第1の方法のコードを示します.
import android.widget.ListView;
public class MyListView extends ListView{
public MyListView(android.content.Context context,android.util.AttributeSet attrs){
super(context, attrs);
}
/**
*
*/
public void onMeasure(int widthMeasureSpec, int heightMeasureSpec)
{
int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE >> 2,
MeasureSpec.AT_MOST);
super.onMeasure(widthMeasureSpec, expandSpec);
}
}
2つ目の方法のコードは次のとおりです.
/** listView */
public void setListViewHeightBasedOnChildren(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();
// totalHeight += 80;
}
ViewGroup.LayoutParams params = listView.getLayoutParams();
// params.height = 80 * (listAdapter.getCount() - 1);
// params.height = 80 * (listAdapter.getCount());
params.height = totalHeight
+ (listView.getDividerHeight() * (listAdapter.getCount() - 1));
((MarginLayoutParams) params).setMargins(0, 0, 0, 0);
listView.setLayoutParams(params);
}
ここまでで問題は終わります.もしどの友达がもっと良い解決方法があれば、分かち合うことを忘れないでください.