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の方法のコードを示します.
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);

          

         }

ここまでで問題は終わります.もしどの友达がもっと良い解決方法があれば、分かち合うことを忘れないでください.