2

この質問ListViewで、特定のアイテムについて同様のことを達成しました。

ただし、今は、ユーザーがアイテムをクリックできるようにしたいと考えています。これにより、ユーザーがタップしたアイテムが基本的に強調表示されます。ViewBinderアプリケーションでタップされたアイテムのリストを保持しており、スクロールが発生したときにこれを参照できるはずですが、それ自体LinearLayoutを構成する に何も適応していないため、オブジェクトを取得する方法がわかりません背景色を適切に設定するため。ListViewLinearLayout

ご存知かもしれませんが、スクロールするときに Android はリスト項目を再利用しますが、個々のリスト項目の書式設定 (色など) を変更しない限り問題ありません。その場合、リスト アイテムの色や書式が正しくないことになります。リスト項目内ViewBinderの問題を解決するために を使用していますが、それ自体の背景に対して同様のことを行う方法がわかりません。TextViewsListView

4

2 に答える 2

1

カスタム行レイアウト(custom_row.xmlなど)を作成し、アクティビティの通常のレイアウトと同じように、必要なビューを配置します(したがって、この場合、テキストのテキストビューと、おそらく左側のアイコンを提供します。それの)。

次に、既存のアダプターを拡張してカスタムアダプターを作成し、getViewメソッドをそのようにオーバーライドします。タイトルとサブタイトルの両方でレイアウトcustom_rowを使用する例を次に示します。

class CustomAdapter<T> extends ArrayAdapter<T> {

/** List item title */
protected TextView mTitle;
/** List item subtitle */
protected TextView mSubtitle;

/**
 * @param context
 *            Current context
 * @param items
 *            Items being added to the adapter
 */
public CustomAdapter(final Context context, final List<T> items) {
    super(context, R.layout.custom_row, items);
}

/** Construct row */
@Override
public View getView(final int position, final View convertView, final ViewGroup parent) {
    View view = convertView;
    if (view == null) {
        final LayoutInflater li = (LayoutInflater) getContext().getSystemService(
                Context.LAYOUT_INFLATER_SERVICE);
        view = li.inflate(R.layout.custom_row, null);
    }
    mTitle = (TextView) view.findViewById(R.id.custom_row_title);
    mSubtitle = (TextView) view.findViewById(R.id.custom_row_subtitle);
    return view;
}
}

示されているように、インフレータサービスを介して作成したcustom_rowレイアウトで指定されたアイテムを取得できます。次に、必要に応じてオブジェクトを操作できます。

于 2011-07-05T19:01:57.123 に答える
0

1 つの方法は、デフォルトの状態の背景が透明で、選択された状態の背景が必要な状態リストを使用することだと思います。

たとえば、Romain Guy の回答を参照してください: Android で ListView アイテムの背景色を変更する

参照: Android ListView State リストにデフォルトの項目の背景が表示されない

于 2011-07-05T18:21:18.077 に答える