2017-02-10 179 views
0
<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:baselineAligned="false" 
    android:orientation="horizontal" 
    android:weightSum="100" 
    android:background="@drawable/round_shape" 
    android:descendantFocusability="blocksDescendants" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_weight="25"> 
    <TextView 
     android:text="Title" 
     android:paddingStart="20dp" 
     android:ellipsize="end" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/borrowBookTitle" 
     android:maxLines="1" 
     android:textSize="25sp" 
     android:textColor="#000000" 
     /> 
    <TextView 
     android:text="Locate" 
     android:paddingStart="20dp" 
     android:ellipsize="end" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/locate" 
     android:maxLines="2" 
     android:textSize="15sp" 
     android:textColor="#838383" 
     /> 
    <TextView 
     android:text="borrowStartDate" 
     android:layout_marginStart="10dp" 
     android:layout_marginEnd="5dp" 
     android:layout_marginTop="8dp" 
     android:paddingStart="10dp" 
     android:paddingEnd="20dp" 
     android:paddingBottom="5dp" 
     android:layout_width="wrap_content"`enter code here` 
     android:layout_height="wrap_content" 
     android:visibility="gone" 
     android:id="@+id/borrowStartDate" 
     android:maxLines="1" 
     android:textSize="17sp" 
     android:textColor="#000000" 
     android:background="@color/childview_background" 
    /> 
    <TextView 
     android:text="borrowEndDate" 
     android:layout_marginStart="10dp" 
     android:layout_marginEnd="10dp" 
     android:paddingStart="10dp" 
     android:paddingEnd="20dp" 
     android:paddingBottom="5dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/borrowEndDate" 
     android:visibility="gone" 
     android:maxLines="1" 
     android:textSize="17sp" 
     android:textColor="#000000" 
     android:background="@color/childview_background" 
     /> 
</LinearLayout> 
<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_weight="75"> 

    <TextView 
     android:text="D-11" 
     android:paddingStart="5dp" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:id="@+id/borrowDday" 
     android:textSize="35sp" 
     android:textColor="#000000" 
     /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:backgroundTint="@color/button1" 
     android:id="@+id/renewBtn" 
     android:textSize="20sp" 
     android:textColor="#000000" 
     android:visibility="gone" 
     android:text="RENEW" 
     /> 
</LinearLayout> 

列表視圖動態項目高度

以上的XML文件是Listview's項目XML文件。 borrowStartDate,borrowEndDaterenewBtn visiblility不見了。 但是當點擊項目,改變了可見

borrowListView.setOnItemClickListener(new AdapterView.OnItemClickListener(){ 
        @Override 
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
         TextView startDate = (TextView)view.findViewById(R.id.borrowStartDate); 
         TextView endDate = (TextView)view.findViewById(R.id.borrowEndDate); 
         Button renewBtn = (Button)view.findViewById(R.id.renewBtn); 
         if (startDate.getVisibility() == View.GONE) { 
          startDate.startAnimation(AnimationUtils.loadAnimation(view.getContext(), R.anim.slide_down_and_fade_in)); 
          endDate.startAnimation(AnimationUtils.loadAnimation(view.getContext(), R.anim.slide_down_and_fade_in)); 
          renewBtn.startAnimation(AnimationUtils.loadAnimation(view.getContext(), R.anim.fade_in)); 

          startDate.setVisibility(View.VISIBLE); 
          endDate.setVisibility(View.VISIBLE); 
          renewBtn.setVisibility(View.VISIBLE); 
         } 
         else { 
          startDate.setVisibility(View.GONE); 
          endDate.setVisibility(View.GONE); 
          renewBtn.setVisibility(View.GONE); 
         } 
        } 
       }); 

它的變化知名度代碼

問題是Listview高度物品時飄的高度匹配。 所以當我點擊每個項目不直接顯示部分。

我要當點擊物品,Listview高度自動擴展

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_height="match_parent" 
    android:layout_width="match_parent" 
    android:fillViewport="true"> 
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin"> 
     <WebView 
      android:layout_width="0dp" 
      android:layout_height="0dp" 
      android:visibility="gone" 
      android:id="@+id/rightWebView" 
      /> 

     <Button 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Refresh" 
      android:backgroundTint="@color/button1" 
      android:drawableEnd="@drawable/refresh_picto" 
      android:id="@+id/refreshBorrowBook" 
      android:onClick="refreshBorrow" 
      android:layout_marginBottom="10dp" 
      /> 

     <ListView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/borrowBookList" 
      android:dividerHeight="10dp" 
      android:divider="@color/main_background" 
      /> 
     <TextView 
      android:text="예약 목록" 
      android:paddingStart="50dp" 
      android:visibility="gone" 
      android:layout_marginTop="15dp" 
      android:layout_marginBottom="20dp" 
      android:textColor="#000000" 
      android:textSize="25sp" 
      android:background="@drawable/round_shape" 
      android:backgroundTint="@color/childview_background" 
      android:id="@+id/reservation_list_text" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" /> 
     <ListView 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/reservationBookList" 
      android:dividerHeight="10dp" 
      android:divider="@color/main_background" 
      /> 
    </LinearLayout> 
</ScrollView> 

這是片段代碼


添加快照

after refresh button點擊刷新按鈕後

when click item當點擊我TEM

如果向下滾動,然後顯示ListView的其他部分

我不想滾動。

只需單擊項目,然後listview自動獲得高度。

我覺得這個問題是不是與相對notifyDataSetChanged();

+0

變更後的知名度調用'notifyDataSetChanged();'它將作品。 –

+0

你的問題不清楚..pls添加一些快照 –

+0

顯示它的外觀,以及你希望它看起來如何。沒有視覺就不清楚。 –

回答

0

使用

view.getLayoutParams().Height=value 

您不必順便說 希望幫助

0

以下方法計算每個子視圖切換的知名度高度,按ListView中的任何子視圖的按鈕後,必須調用下面的方法才能看到和看不見。

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

      int totalHeight = 0; 
      int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST); 
      for (int i = 0; i < listAdapter.getCount(); i++) { 
       View listItem = listAdapter.getView(i, null, listView); 
       listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED); 
       totalHeight += listItem.getMeasuredHeight(); 
      } 

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

調用此函數更改的ListView項目之後,這樣的:

Utility.setListViewHeightBasedOnChildren(myListView); 
+0

我在'borrowListView.setOnItemClickListener()'中添加了代碼末尾,但仍然不僅僅顯示所有的子視圖,而且還發生了滾動,當'textview''變爲可見 –