10

のgetDropDownViewメソッドをオーバーライドすると、奇妙な動作が発生しますArrayAdapter。カスタム オブジェクトから正しい文字列値を表示するには、このメソッドをオーバーライドする必要があります。それは私のアレイアダプターがどのように見えるかです:

ArrayAdapter<NoteType> adapter = new ArrayAdapter<NoteType>(this, android.R.layout.simple_spinner_item, lstNoteTypes){
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        TextView lbl = (TextView) super.getView(position, convertView, parent);
        lbl.setText(getItem(position).getName());
        return lbl;
    }

    @Override
    public View getDropDownView(int position, View convertView, ViewGroup parent) {
        TextView lbl = (TextView) super.getView(position, convertView, parent);
        lbl.setText(getItem(position).getName());
        return lbl;
    }
};
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

したがって、オーバーライドするgetDropDownViewと、スピナーは次のようになります。アイテムの高さのサイズが非常に小さく、これは私が望むものではありません:

ここに画像の説明を入力

しかし、メソッドにコメントを付ける (またはオーバーライドしない)getDropDownViewと、デフォルトのスタイリングでは問題ないように見えますが、必要なテキスト値をドロップダウン項目に挿入することはできません。 ここに画像の説明を入力

をオーバーライドしたため、両方の画像のアイテムの高さに注意してくださいgetDropDownView

助言がありますか?または、コードに何が欠けていますか?

4

4 に答える 4

3

自分で NoteType を記述した場合は、その中で toString() をオーバーライドします。以下を NoteType クラスに追加するだけです。

@Override
public String toString() {
    return getName();
}
于 2013-09-19T13:53:14.310 に答える
2

なぜこれが起こるのか知っていると思いますが、テストする必要があるので、ここでは別の (簡単な) 解決策を示します。

内のすべてのオブジェクトに対する呼び出しであるため、Spinnerクラス内のメソッドをオーバーライドして、 (デフォルトの実装ではなく) String を返すようにすることができます。この方法では、アダプターでオーバーライドする必要はありませんが 、デフォルトのスタイルとデータが含まれています。 toString()ArrayAdaptertoString()NoteTypetoString()getDropDownView()

于 2013-09-19T13:53:31.723 に答える
1

同じことをしなければならなかったので、自分のビューをcheckedTextViewとして使用するようにしました

これで最も重要なことは、次のように高さを設定することです android:layout_height="?attr/dropdownListPreferredItemHeight" 私はベースアダプターを使用していました

于 2015-06-04T07:53:18.750 に答える
1

カスタム BaseAdapter クラスでこの同じ問題に遭遇しました。これはコメントでも言及されていましたが、解決策は実際には非常に簡単です。getDropDownView メソッドから返された TextView にパディングを追加するだけです。

このために余分なファイルを追加する必要はありません。私は ActionBarSherlock (デフォルトの Spinner のみ) を使用していなかったので、それとは関係ないと思います。あなたの例に適応した、私のために働いたコードは次のとおりです。

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    // Create custom TextView
    TextView lbl = (TextView) super.getView(position, convertView, parent);
    lbl.setText(getItem(position).getName());

    // Add padding to the TextView, scaled to device
    final float scale = context.getResources().getDisplayMetrics().density;
    int px = (int) (10 * scale + 0.5f);
    lbl.setPadding(px, px, px, px);

    return lbl;
}

@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
    // Create custom TextView
    TextView lbl = (TextView) super.getView(position, convertView, parent);
    lbl.setText(getItem(position).getName());

    // Add padding to the TextView, scaled to device
    final float scale = context.getResources().getDisplayMetrics().density;
    int px = (int) (10 * scale + 0.5f);
    lbl.setPadding(px, px, px, px);

    return lbl
}
于 2014-07-24T16:36:16.640 に答える