2017-06-29 45 views
1

我對自定義適配器的列表視圖有問題。我使用TextView和Button創建了自定義佈局。我希望當單擊按鈕時,從列表中刪除項目後,列表的高度將根據列表中項目的數量而改變。 問題是,我發現要使用適配器請求列表視圖的方法,所以我不能在內部定製適配器中調用它。 如何設置自定義適配器內的列表視圖的高度?單擊自定義適配器內的按鈕後設置ListView高度(安卓)

MyCustomAdapter.java:

public class MyCustomAdapter extends BaseAdapter implements ListAdapter { 
private ArrayList<String> list = new ArrayList<String>(); 
private Context context; 
private ListView lista; 


public MyCustomAdapter(ArrayList<String> list, Context context) { 
    this.list = list; 
    this.context = context; 
} 

@Override 
public int getCount() { 
    return list.size(); 
} 

@Override 
public Object getItem(int pos) { 
    return list.get(pos); 
} 

@Override 
public long getItemId(int pos) { 
    return 0; 
    //just return 0 if your list items do not have an Id variable. 
} 

@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    View view = convertView; 
    if (view == null) { 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.custom_row, null); 
    } 

    TextView listItemText = (TextView)view.findViewById(R.id.item); 
    listItemText.setText(list.get(position)); 

    Button btnExcluir = (Button)view.findViewById(R.id.btnExcluir); 

    btnExcluir.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 

      list.remove(position); 
      notifyDataSetChanged(); 

    //HERE I want to change ListView's height 
     } 
    }); 

    return view; 
} 

函數來設置ListView的高度:

public static void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) 
     return; 

    int desiredWidth = View.MeasureSpec.makeMeasureSpec(listView.getWidth(), View.MeasureSpec.UNSPECIFIED); 
    int totalHeight = 0; 
    View view = null; 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     view = listAdapter.getView(i, view, listView); 
     if (i == 0) 
      view.setLayoutParams(new ViewGroup.LayoutParams(desiredWidth, ViewGroup.LayoutParams.WRAP_CONTENT)); 

     view.measure(desiredWidth, View.MeasureSpec.UNSPECIFIED); 
     totalHeight += view.getMeasuredHeight(); 
    } 
    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
} 

custom_row.xml:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="horizontal" > 


<TextView 
    android:id="@+id/item" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_weight="1" 
    android:text="TextView" 
    android:layout_marginLeft="10dp" 
    android:layout_marginStart="10dp" 
    android:layout_alignBaseline="@+id/btnExcluir" 
    android:layout_alignBottom="@+id/btnExcluir" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" /> 

<Button 
    android:id="@+id/btnExcluir" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:background="@drawable/ic_btnexcluir" 
    android:minHeight="0dp" 
    android:minWidth="0dp" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    android:layout_marginRight="87dp" 
    android:layout_marginEnd="87dp" /> 

</LinearLayout> 

我真的很感激任何幫助!

回答

0

更改構造這樣,

public MyCustomAdapter(ArrayList<String> list, Context context, ListView lista) { 
      this.list = list; 
      this.context = context; 
      this.lista = lista; 
     } 

,你可以把它叫做適配器類中。

+0

謝謝,它的工作! –

+0

@MarianaBittencourt請你接受答案。 – Krish

相關問題