2017-06-29 6 views
1

リストビューのカスタムアダプターに問題があります。私はTextViewとボタンでカスタムレイアウトを作った。ボタンをクリックすると、リストからアイテムを削除した後、そのリストのアイテムの数に応じてリストの高さが変更されます。 問題は、アダプタでリストビューを要求するメソッドが見つかったため、カスタムアダプタの内部に呼び出すことができないということです。 カスタムアダプタ内のリストビューの高さを設定するにはどうすればよいですか?カスタムアダプター(アンドロイド)内のボタンをクリックして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; 
} 

機能は、リストビューの高さを設定するには:

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

関連する問題