多个自定义微调器始终将值设置为一个微调器
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);
}
我的布局中有两个 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);
}