多个自定义微调器始终将值设置为一个微调器

Multiple Custom Spinner always sets values to one spninner

我的布局中有两个 Spinner。第一个到 select 车辆,第二个用于从该特定车辆的短路列表中选择颜色。例如(selected Bajaj,第二个需要显示已保存的车辆颜色列表)

这里我确实从数据库中获取了车辆和颜色的所有数据。两种价值都在我手中。但是,如果我在 Spinner1 中 select 车辆类型,它会在同一微调器中显示该车辆的颜色,而不是在 Spinner2 中显示。首先我有相同的(Spinner getset class、适配器class、自定义布局)。现在我将这三个都创建为不同的。现在也遇到同样的问题

怎么找,我哪里做错了。下面是我正在使用的代码。

  public void setListData()// gets vehicles value from DB
{   
    List<VehicleGetSetter> contacts = vdb.getVehicleListToCustomer(vendor_id);
    for (VehicleGetSetter cn : contacts) {
        final BikeSpinner sched = new BikeSpinner();
                    sched.setBikeName("Select Bike");
            CustomListBikeName.add(sched); 
        }}

   private void setBikeAdapterValues() {// set Vehicle value in Spinner1
    Resources res = getResources();
    adapter = new BikeSpinnerAdapter(NewCustomer.this, R.layout.bike_spinner, CustomListBikeName,res);
    mySpinner.setAdapter(adapter);
    mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View v, int position, long id) {
            bike_no_from_adapter   = ((TextView) v.findViewById(R.id.textbike_numbr)).getText().toString();
            what_bike   = ((TextView) v.findViewById(R.id.textbike)).getText().toString();
            String OutputMsg = "Selected : \n\n"+bike_no_from_adapter;
            if(position!=0){
                setListBikeColor(bike_no_from_adapter);
            }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
                //Toast.makeText(getApplicationContext(), "You Must Select Vehicle", Toast.LENGTH_LONG).show();
        }
    });
}

  public void setListBikeColor(String bike_no_from_adapter){// get color of selected vehicles from DB
    List<VehicleGetSetter> contacts1 = vdb.getVehicleColorListToCustomer(vendor_id,bike_no_from_adapter);
    for (VehicleGetSetter cn1 : contacts1) {
        final BikeSpinn sched1 = new BikeSpinn();
                    sched1.setBikeNumber(cn1.getColor());
            CustomListBikeColor.add(sched1);
            setBikeAdapterValuesColor();
        }
}


  private void setBikeAdapterValuesColor() {// trying to set value in second spinner, but setting in same vehicle spinner.
    Resources res2 = getResources();
    coloradapter = new BikeSpinnerColor(NewCustomer.this, R.layout.bike_spinner_color, CustomListBikeColor,res2);
    cust_bike_color.setAdapter(coloradapter);
    cust_bike_color.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View v, int position, long id) {
            // Get selected row data to show on screen
            bike_no_from_adapter   = ((TextView) v.findViewById(R.id.textbike_numbr)).getText().toString();
            what_bike   = ((TextView) v.findViewById(R.id.textbike)).getText().toString();

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {
                //Toast.makeText(getApplicationContext(), "You Must Select Vehicle", Toast.LENGTH_LONG).show();
        }
    });
}

包含 Spinner 的 MainLayout

 <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg_blue"
android:orientation="vertical" 
>
 <LinearLayout 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:orientation="horizontal">
    <TextView
        android:id="@+id/bike"
        android:layout_width="150dp"
        android:layout_height="wrap_content"
        android:textSize="22dp"
        android:textColor="#000000"
        android:text="Bike Details" />

    <Spinner
        android:id="@+id/cust_bike"
        android:layout_width="120dp"
        android:layout_height="40dp" 
        android:paddingBottom="1dp"
        android:paddingLeft="5dp" />
    <Spinner
        android:id="@+id/cust_bike_color"
        android:layout_width="120dp"
        android:layout_height="40dp" 
        android:paddingBottom="1dp"
        android:paddingLeft="5dp" />
    <Spinner
        android:id="@+id/cust_bike_number"
        android:layout_width="120dp"
        android:layout_height="40dp" 
        android:paddingBottom="1dp"
        android:paddingLeft="5dp" />
    </LinearLayout>
</LinearLayout>

微调器的自定义布局(两个微调器相似(名称不同))

 <?xml version="1.0" encoding="utf-8"?>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 android:orientation="horizontal" >
 <TextView
    android:id="@+id/textbike"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18dp"
    android:layout_marginRight="5dp"
    android:textColor="#000000" />
 <TextView
    android:id="@+id/textbike_numbr"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="18dp"
    android:textColor="#000000" />

</LinearLayout>

自定义 ArrayAdapterClass(两个 Spinner 有两个相似的class)

 public class BikeSpinnerAdapter extends ArrayAdapter<String>{

 private Activity activity;
 private ArrayList data;
  public Resources res;
  BikeSpinner tempValues=null;
  LayoutInflater inflater;
  public BikeSpinnerAdapter(NewCustomer activitySpinner, 
                     int textViewResourceId,   
                     ArrayList objects,
                     Resources resLocal
                    ) 
 {
   super(activitySpinner, textViewResourceId, objects);

   activity = activitySpinner;
   data     = objects;
   res      = resLocal;

   inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

 }

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

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

 public View getCustomView(int position, View convertView, ViewGroup parent) {

   View row = inflater.inflate(R.layout.bike_spinner, parent, false);

   tempValues = null;
   tempValues = (BikeSpinner) data.get(position);

   TextView label        = (TextView)row.findViewById(R.id.textbike_numbr);
   TextView sub          = (TextView)row.findViewById(R.id.textbike);

       label.setText(tempValues.getBikeName());
       sub.setText(tempValues.getBikeNumber());
   return row;
 }
 }

像这样我实现了多个相互关联的 Spinner

单独class设置下拉列表适配器

  public void setListBikeName(String vr_id)
{   vendor_id=vr_id;
    List<VehicleGetSetter> contacts = ((NewCustomer)context).vdb.getVehicleListToCustomer(vendor_id);
    for (VehicleGetSetter cn : contacts) {
        final BikeSpinner sched = new BikeSpinner();
                if(cn.getModelYear().equals(""))
                    sched.setBikeName("Select Bike");
                else
                    sched.setBikeName(cn.getModelYear());
            ((NewCustomer)context).CustomListBikeName.add(sched); /** Take Model Object in ArrayList */
        }         
}

public void setListBikeColor(String name){
    ((NewCustomer)context).CustomListBikeColor.clear();
    List<VehicleGetSetter> contacts = ((NewCustomer)context).vdb.getVehicleColorListToCustomer(vendor_id,name);
    for (VehicleGetSetter cn : contacts) {
        final BikeSpinner sched = new BikeSpinner();

                    sched.setBikeName(cn.getColor());

                ((NewCustomer)context).CustomListBikeColor.add(sched); /** Take Model Object in ArrayList */
                ((NewCustomer)context).colorAdapterIntermediater();

        }
}

public void setListBikeNumber(String name,String color){
    ((NewCustomer)context).CustomListBikeNumber.clear();
    List<VehicleGetSetter> contacts = ((NewCustomer)context).vdb.getVehicleNumberListToCustomer(vendor_id,name,color);
    for (VehicleGetSetter cn : contacts) {
        final BikeSpinner sched = new BikeSpinner();

                    sched.setBikeName(cn.getNumber());

                ((NewCustomer)context).CustomListBikeNumber.add(sched); /** Take Model Object in ArrayList */
                ((NewCustomer)context).numberAdapterIntermediater();

        }
}

public void setBikeAdapterValues(ArrayList<BikeSpinner> CustomListBikeName,BikeSpinnerAdapter adapter,
        Spinner mySpinner,final String str,Resources res) {
    res = context.getResources();
    Spinner temp=mySpinner;
    adapter = new BikeSpinnerAdapter((NewCustomer) context, R.layout.bike_spinner, CustomListBikeName,res);
    temp.setAdapter(adapter);
    temp.setOnItemSelectedListener(new OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> parentView, View v, int position, long id) {
            if(str.equals("name")){
                bike_name_from_adapter   = ((TextView) v.findViewById(R.id.textbike_numbr)).getText().toString();
                    setListBikeColor(bike_name_from_adapter);
                }
            else if(str.equals("color")){
                bike_color_from_adapter   = ((TextView) v.findViewById(R.id.textbike_numbr)).getText().toString();
                setListBikeNumber(bike_name_from_adapter, bike_color_from_adapter);
            }
            else if(str.equals("number")){
                bike_no_from_adapter   = ((TextView) v.findViewById(R.id.textbike_numbr)).getText().toString();

                if(bike_no_from_adapter.length()>=10){
                    ((NewCustomer)context).last_layout.setVisibility(View.VISIBLE);                                     
                }
                else
                    ((NewCustomer)context).last_layout.setVisibility(View.GONE);
                ((NewCustomer)context).passBikeValueToCustomer(bike_name_from_adapter,bike_color_from_adapter,bike_no_from_adapter);
            }

        }

        @Override
        public void onNothingSelected(AdapterView<?> parentView) {

        }
    });
}

}

主要Class:

    bikeadapterobj.setListBikeName(_id);        
    bikeadapterobj.setBikeAdapterValues(CustomListBikeName,adapter,mySpinner,"name",res);
   public void colorAdapterIntermediater(){
    bikeadapterobj.setBikeAdapterValues(CustomListBikeColor,coloradapter,cust_bike_color,"color",res);
}

public void numberAdapterIntermediater(){
    bikeadapterobj.setBikeAdapterValues(CustomListBikeNumber,numberadapter,cust_bike_number,"number",res);
}
public void passBikeValueToCustomer(String name,String colr,String bkno){

        bike_name=name;
        bike_color=colr;
        bike_reg_number=bkno;
        Log.d("Bike Details : ", bike_name+" "+bike_color+" "+bike_reg_number);
    }