2017-08-11 13 views
0

私はツールバーでセットアップする必要があるスピナーのために、以下の画像を添付しました。Android:メニューリソースxmlファイルからツールバーのスピナーを設定するには?

文字列配列を使用してスピナーを設定しましたが、各項目のほかにテキストだけが表示され、色付きの点は表示されません。カスタムアダプターを使ってスピナーを設定しようとしましたが、スピナードロップダウンで項目をクリックした後にドットが表示されます。

誰でもこれを達成する方法についてお手伝いできますか?参照やリンクは参考になります。また、任意のres/menu /ファイルからスピナーを読み込むことはできますか?

ツールバーのイメージツールバースピナーメニューをクリックした後、スピナー

Toolbar image before clicking on spinner

をクリックする前に

After clicking on the toolbar spinner menu

誰もが必要とする場合、私は参考のために、顧客アダプターコードを添付しています

カスタムアダプターコード:

public class HeaderStockOverviewAdapter extends ArrayAdapter<HeaderSpinnerItem> { 

private LayoutInflater inflater; 

public HeaderStockOverviewAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull HeaderSpinnerItem[] objects) { 
    super(context, resource, objects); 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 


@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    return getRowView(position, convertView, parent); 
} 

@Override 
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    return getRowView(position, convertView, parent); 
} 

@NonNull 
private View getRowView(int position, @Nullable View convertView, @Nullable ViewGroup parent) { 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.header_spinner_item, parent, false); 
    } 

    TextView txtTitle = convertView.findViewById(R.id.title); 
    ImageView imageView = convertView.findViewById(R.id.icon); 

    HeaderSpinnerItem rowItem = getItem(position); 
    txtTitle.setText(rowItem.getText()); 
    imageView.setBackgroundColor(rowItem.getColor()); 

    return convertView; 

} 

} 

PS:私はAPI 21のデバイスをターゲットと

+1

カスタムアダプターのコードをアップロードできますか? – hsm59

+0

カスタムアダプタコードを追加 –

答えて

0

public class HeaderStockOverviewAdapter extends ArrayAdapter<HeaderSpinnerItem> { 
 

 
private LayoutInflater inflater; 
 

 
public HeaderStockOverviewAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull HeaderSpinnerItem[] objects) { 
 
    super(context, resource, objects); 
 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
 
} 
 

 

 
@NonNull 
 
@Override 
 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
 
    return getRowView(position, convertView, parent); 
 
} 
 

 
@Override 
 
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
 
    if (convertView == null) { 
 
     convertView = inflater.inflate(R.layout.header_spinner_item, parent, false); 
 
    } 
 

 
    TextView txtTitle = convertView.findViewById(R.id.title); 
 
    ImageView imageView = convertView.findViewById(R.id.icon); 
 

 
    HeaderSpinnerItem rowItem = getItem(position); 
 
    txtTitle.setText(rowItem.getText()); 
 
    imageView.setBackgroundColor(rowItem.getColor()); 
 

 
    return convertView; 
 
} 
 

 
@NonNull 
 
private View getRowView(int position, @Nullable View convertView, @Nullable ViewGroup parent) { 
 

 
    if (convertView == null) { 
 
     convertView = inflater.inflate(R.layout.header_spinner_item, parent, false); 
 
    } 
 

 
    TextView txtTitle = convertView.findViewById(R.id.title); 
 
    ImageView imageView = convertView.findViewById(R.id.icon); 
 

 
    HeaderSpinnerItem rowItem = getItem(position); 
 
    txtTitle.setText(rowItem.getText()); 
 
    imageView.setBackgroundColor(rowItem.getColor()); 
 

 
    return convertView; 
 

 
} 
 

 
}

上記しています。注:行のビューとビューをドロップダウンする必要があり同じビューを共有する

+0

getRowViewと同じビューをgetDropDownViewに渡すと問題が解決する可能性があります。 –

+0

私はすでにgetView()とgetDropDownView()の両方から同じメソッドを呼び出しています。私のアダプタコードを確認してください –

+0

あなたは正しいです。 –

0

ついに答えました。 getView()メソッドにあり、getDropDownView()メソッドにのみあります。

  1. 我々はgetView()メソッドから返さビューにはアイテムが選択されたときに表示される図です。

  2. getDropDownView()メソッドから返されたビューは、ドロップダウンメニューが表示されたときにドロップダウンの各項目に対して表示されるビューです。

この場合、カスタムアダプターコードで行った変更は次のとおりです。

public class HeaderStockOverviewAdapter extends ArrayAdapter<HeaderSpinnerItem> { 

private LayoutInflater inflater; 

public HeaderStockOverviewAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull HeaderSpinnerItem[] objects) { 
    super(context, resource, objects); 
    inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 


@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.simple_spinner_item, parent, false); 
    } 

    TextView txtTitle = convertView.findViewById(R.id.spinnerTitleText); 

    HeaderSpinnerItem rowItem = getItem(position); 
    assert rowItem != null; 
    txtTitle.setText(getContext().getResources().getString(rowItem.getText())); 

    return convertView; 

} 

@Override 
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    return getRowView(position, convertView, parent); 
} 

@NonNull 
private View getRowView(int position, @Nullable View convertView, @Nullable ViewGroup parent) { 

    if (convertView == null) { 
     convertView = inflater.inflate(R.layout.header_spinner_item, parent, false); 
    } 

    TextView txtTitle = convertView.findViewById(R.id.title); 
    CircleImageView imageView = convertView.findViewById(R.id.icon); 

    HeaderSpinnerItem rowItem = getItem(position); 
    assert rowItem != null; 
    txtTitle.setText(getContext().getResources().getString(rowItem.getText())); 
    imageView.setImageResource(rowItem.getColor()); 

    return convertView; 

} 

} 
関連する問題