list_item で非表示の線形レイアウトを非表示にすることで、リスト ビューの下部を下にスライドさせようとしています。問題は、ビューが LayoutAdapter で再利用されているように見えるため、変更が適用しようとしていたビューだけに影響しないことです。代わりに、ビューが再利用される場所に表示されます。ドロップダウンをリクエストしたビューのみにドロップダウンを制限するにはどうすればよいですか? ドロップダウンとは、線形レイアウトを再表示することを意味します。
質問する
97 次
1 に答える
0
リストには常に、ユーザーが見ることができる数のビューがあります。ユーザーがスクロールすると、ビューから外れたビューが再利用され、ユーザーがスクロールした新しいリスト データが表示されます。リスト項目が再描画されたときに、リスト項目の状態をリセットする必要があります。
リスト データを格納するオブジェクトにブール変数 'expanded' を追加します。(ArrayAdapter に追加するオブジェクト)。ユーザーが listItem で LinearLayout を展開する場合は、expanded = true を設定します。
public class MyListItem
{
public boolean expanded = false;
// data you are trying to display to the user goes here
// ...
}
次に、リスト アダプタの getView メソッドでこれを行います。
public class MyListAdapter extends ArrayAdapter<MyListItem>
{
public MyListAdapter (Context context, ArrayList<AudioPlaylist> objects)
{
super(context, R.layout.list_item, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent)
{
LinearLayout rowLayout;
MyListItem item = this.getItem(position);
if (convertView == null)
{
rowLayout = (LinearLayout) LayoutInflater.from(this.getContext()).inflate(R.layout.list_item, parent, false);
}
else
{
rowLayout = (LinearLayout) convertView;
}
//set the textviews, etc that you need to display the data with
//...
LinearLayout expanded = rowLayout.findViewById(R.id.expanded_area_id);
if (item.expanded)
{
//show the expanded area
expanded.setVisibility(View.VISIBLE);
}
else
{
//hide the area
expanded.setVisibility(View.GONE);
}
return rowLayout;
}
}
list_item.xml にすべてをラップする LinearLayout があることを確認してください。そうしないと、キャスト例外が発生します。
それが役立つことを願っています...
于 2012-11-29T17:02:03.887 に答える