2016-06-24 19 views
1

listViewをpopupWindowに配置すると、アイテムが多数ある場合、popupWindowが画面サイズを超えてしまいます。そのため、最大高さを制限したいバーリストビューの)を超えた場合、おかげですべてのリストビューの最大高さを設定する方法

+1

この答えをチェックアウト:http://stackoverflow.com/a/22002054/3363481 – earthw0rmjim

+0

おかげで、あなたはこのように進むことができ、あなたの活動又はその断片で上記のメソッドを呼び出すために

public class AppUtil{ public static void setListViewHeightBasedOnChildren(ListView listView) { if (listView == null) { return; } ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { // pre-condition return; } int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom(); for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); if (listItem instanceof ViewGroup) { listItem.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); } listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); listView.setLayoutParams(params); } } 

あなたのソリューションは効率的です – Zijian

答えて

0

は、それはあなたに助け

public static void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) { 
    // pre-condition 

     return; 
    } 


int totalHeight = listView.getPaddingTop() + listView.getPaddingBottom(); 
for (int i = 0; i < 5; i++) //here you can set 5 row at a time if row excceded the scroll automatically available 
{ 
    View listItem = listAdapter.getView(i, null, listView); 
    if (listItem instanceof ViewGroup) { 
     listItem.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 
    } 
     listItem.measure(0, 0); 
     totalHeight += listItem.getMeasuredHeight(); 
} 

    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 

} 

することができ、あなたのプロジェクトにクラスAppUtilを作成し、この

 YourAdapter mYoursAdapter = new YourAdapter(); 
    mListview.setAdapter(mYoursAdapter); 
    setListViewHeightBasedOnChildren(mListview); 
0

のように使用することができ、これを試してみてください。次のようにしてください:

public class MedicalReportsFragment extends Fragment { 
@Bind(R.id.lv_investigative_report) 
    ListView investigativeReportLV; 

     private MedicalReportsAdapter mMedicalReportsAdapter; 
    @Override 
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    mMedicalReportsAdapter = new MedicalReportsAdapter(getActivity(), mMedicalReportOverviews,true); 
    investigativeReportLV.setAdapter(mMedicalReportsAdapter); 
      AppUtil.setListViewHeightBasedOnChildren(investigativeReportLV); 
      } 
    } 
関連する問題