0

プロジェクト内に ListView があります。これには多くの要素があり、レール サーバーから動的に読み込まれるため、カスタム アダプターを使用します。

アイテムが長押しされたときに ListItem の内容を変更したい。これを実現するために、ListItem 内に 2 つのレイアウトがあり、1 つが表示され、もう 1 つが非表示になっています。

問題は、アイテムを長押しすると、レイアウトが変更されますが (予想どおり)、他の ListItems も影響を受け、同じように変更されることです。これは 5 項目ごとに 1 回発生するようですが、その理由はわかりません。

これは私が使用している LongClickListener です。カスタム アダプターの GetView メソッド内にあります。

View v = convertView;

if (v == null){
   LayoutInflater vi =
      (LayoutInflater)getActivity().getSystemService(
         Context.LAYOUT_INFLATER_SERVICE);
   v = vi.inflate(R.layout.list_item, null);
}

final LinearLayout placeInfo =
   (LinearLayout) v.findViewById(R.id.list_item_info);

final RelativeLayout placeBrief =
   (RelativeLayout)v.findViewById(R.id.list_item_brief);

v.setOnLongClickListener(new OnLongClickListener(){

   @Override public boolean onLongClick(View v) {
      placeInfo.setVisibility(View.GONE);
      placeBrief.setVisibility(View.VISIBLE);
      return false;
   }});

助けていただければ幸いです。事前に感謝します。

4

1 に答える 1

0

ListViews はビューをリサイクルするため、すべてのアイテムに対していくつかのビューしかありません。これらのビュー インスタンスの 1 つを直接変更して、info|brief を切り替えます。必要なのは、影響を受ける位置の info|brief フラグのステータスを別の場所に保存することです(たとえば、アダプタで「ブリーフ」にする必要がある位置のリスト)。そうすれば、戻ってきたときにgetView()正しいものを表示できます。

于 2013-02-11T21:25:56.843 に答える