2017-11-03 23 views
-1

アイテムが別のスピナーから選択されたときに、AppCompatSpinnerのテキストの色を変更する必要があります。カテゴリアダプタの別のSpinnerアイテムを選択したときのSpinnerのテキストカラーの変更

enter image description here

AppCompatSpinner(categorySpinner)

AppCompatSpinner(fromSpinner)

categorySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
     @Override 
     public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
      switch (position) { 
       case 0: 
        //Setting the upper adapter according to the category. 
        lengthAdapter = new SpinnerAdapter(getApplicationContext(), lengthList); 
        lengthAdapter.setDropDownViewResource(R.layout.item_dd_r); 
        fromSpinner.setAdapter(lengthAdapter); 

     //Need to add code to change the Text Color of fromSpinner. 
     ... 
} 
CategorySpinnerAdapter adapter = new CategorySpinnerAdapter(this, categoriesList); 
adapter.setDropDownViewResource(R.layout.cat_dd_r); 
categorySpinner.setAdapter(adapter); 

コード -

パブリッククラスCategorySpinnerAdapterはArrayAdapter {

private Context context; 
private List<String> categoryItemList; 

public CategorySpinnerAdapter(Context context, List<String> categoryItemList) { 
    super(context, 0, categoryItemList); 
    this.context = context; 
    this.categoryItemList = categoryItemList; 
} 

@NonNull 
@Override 
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    String item = categoryItemList.get(position); 

    View view = convertView; 
    if (view == null) { 
     view = LayoutInflater.from(parent.getContext()).inflate(R.layout.spinner_item_convert_cat, parent, false); 
    } 

    TextView spinnerText = view.findViewById(R.id.textView_spinnerItem_cat); 
    spinnerText.setText(item); 

    return view; 
} 

@Override 
public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { 
    TextView dropDownText = (TextView) super.getDropDownView(position, convertView, parent); 
    return dropDownText; 
} 
} 
を拡張
+0

の項目を選択する上でsecondSpinnerのテキストの色を変更する方法ですあなたが達成したいのかに関するいくつかのスクリーンショットを添付してください? – Mandy8055

答えて

0

ここfirstSpinner

boolean selected = false; 

firstSpinner.setOnItemSelectedListener(
     new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, 
        int position, long l) { 

       if (position != 0) { 
        if (!selected) selected = true; 
        secondSpinner.post(new Runnable() { 
         @Override 
         public void run() { 
          ((TextView) ((ViewGroup) secondSpinner.getSelectedView()).getChildAt(0)) 
            .setTextColor(Color.BLACK); 
         } 
        }); 
       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> adapterView) {} 
     }); 

secondSpinner.setOnItemSelectedListener(
     new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, 
        int position, long l) { 

       if (selected) { 
        secondSpinner.post(new Runnable() { 
         @Override 
         public void run() { 
          ((TextView) ((ViewGroup) secondSpinner.getSelectedView()).getChildAt(0)) 
            .setTextColor(Color.BLACK); 
         } 
        }); 
       } 
      } 

      @Override 
      public void onNothingSelected(AdapterView<?> adapterView) {} 
     }); 
+0

私はRunnableがトリックをしたと思います。ありがとうございました! :) –

+0

しかし、これは最初の要素の色を変更するだけで、選択されたとき、つまりデフォルトでのみ変更されます。したがって、この方法は完全には機能しません。 –

+0

@AkshanshJain 'firstSelector'が選択されている場合はtrueに設定されたbooleanフラグを使用し、' secondSelector'に同じリスナーを追加し、そのフラグをチェックし、trueの場合は同じrunnableを呼び出します。 –

関連する問題