2016-05-29 50 views
0

我有一个spinner2,它将有一天和一个月,当用户选择日期时,s1和s2将分别显示小时和分钟。Dynamic Spinner无法正常工作

活动开始后,我每天都会选中。 问题是我每天都得到烤面包。这表明它无尽地被选中。另外,我不能在s1和s2中选择数值,微调持续刷新。如何解决这个问题?

public class try_spinner extends Activity implements AdapterView.OnItemSelectedListener { 
Spinner spinner1, spinner2, s1, s2, s3; 
String app_name, room_name; 
TextView app, room; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
// TODO Auto-generated method stub 
super.onCreate(savedInstanceState); 
setContentView(R.layout.try_spinner); 

DisplayMetrics dm = new DisplayMetrics(); 
getWindowManager().getDefaultDisplay().getMetrics(dm); 

int width = dm.widthPixels; 
int height = dm.heightPixels; 

getWindow().setLayout((int) (width * .9), (int) (height * .7)); 

Bundle extras = getIntent().getExtras(); 
final String app_string = extras.getString("APPLIANCE_NAME"); 
final String room_string = extras.getString("APPLIANCE_ROOM"); 

app = (TextView) findViewById(R.id.app_name); 
app.setText(app_string); 
room = (TextView) findViewById(R.id.room_name); 
room.setText(room_string); 

spinner1 = (Spinner) findViewById(R.id.spinner1); 
spinner1.setOnItemSelectedListener(this); 

spinner2 = (Spinner) findViewById(R.id.spinner2); 
s1 = (Spinner) findViewById(R.id.s1); 
s2 = (Spinner) findViewById(R.id.s2); 
s3 = (Spinner) findViewById(R.id.s3); 
spinner2.setOnItemSelectedListener(this); 
s1.setOnItemSelectedListener(this); 
s2.setOnItemSelectedListener(this); 
s3.setOnItemSelectedListener(this); 

if (app_string.equals("Lighting")) { 
    ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.lighting)); 
    dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter2.notifyDataSetChanged(); 
    spinner1.setAdapter(dataAdapter2); 
} else if (app_string.equals("Shower Heater")) { 
    ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.shower_heater)); 
    dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter2.notifyDataSetChanged(); 
    spinner1.setAdapter(dataAdapter2); 
} else { 
    ArrayAdapter<String> dataAdapter2 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.empty)); 
    dataAdapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter2.notifyDataSetChanged(); 
    spinner1.setAdapter(dataAdapter2); 
} 

} 


@Override 
public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, 
         long arg3) { 
// TODO Auto-generated method stub 
String txt_spinner2 = String.valueOf(spinner2.getSelectedItem()); 
Toast.makeText(this, txt_spinner2, Toast.LENGTH_SHORT).show(); 
if (txt_spinner2.contentEquals("Daily")) { 
    List<String> list = new ArrayList<String>(); 
    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.days)); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter.notifyDataSetChanged(); 
    s1.setAdapter(dataAdapter); 
    String txt_s1 = String.valueOf(s1.getSelectedItem()); 

    //set for daily hours usage 
    List<String> list3 = new ArrayList<String>(); 
    ArrayAdapter<String> dataAdapter3 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.hours)); 
    dataAdapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter3.notifyDataSetChanged(); 
    s2.setAdapter(dataAdapter3); 

    //set for daily minutes usage 
    List<String> list4 = new ArrayList<String>(); 
    ArrayAdapter<String> dataAdapter4 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.hours)); 
    dataAdapter4.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter4.notifyDataSetChanged(); 
    s2.setAdapter(dataAdapter4); 

    //set for daily empty thrd space 
    List<String> list5 = new ArrayList<String>(); 
    ArrayAdapter<String> dataAdapter5 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, getResources().getStringArray(R.array.empty)); 
    dataAdapter5.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter5.notifyDataSetChanged(); 
    s3.setAdapter(dataAdapter5); 
} 

else if (txt_spinner2.contentEquals("Monthly")) { 
    List<String> list = new ArrayList<String>(); 
    list.add("Conveyance");//you should add items from db here(2nd spinner) 
    list.add("the end"); 
    ArrayAdapter<String> dataAdapter6 = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, list); 
    dataAdapter6.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    dataAdapter6.notifyDataSetChanged(); 
    s3.setAdapter(dataAdapter6); 
} 

} 
+0

我从你的代码中得到的结果是你给'spinner1'提供了值,但是当你点击了,你正在从'spinner2'中取得物品。这是为什么? – Aradhna

+0

spinner1和spinner2都具有最初设定的值,而s1,s2,s3最初为空。 spinner1将根据textview标题内的文字(例如加热器或照明)进行设置。 spinner2是用户每天或每月选择的动态选项,那么每月或每天(小时,小时,分钟)s1,s2,s3将被设置为(小时,分钟,空值)..问题与动态spinner2会导致s1,s2,s3无法选择。他们继续刷新spinners s1,s2,s3,通过获得(“daily”)的许多敬酒证明,这正好在'(spinner2.getSelectedItem())之后。 ' – whoami

回答

1

首先将适配器首先设置为微调,然后为它调用setOnItemSelectedListener()。 b'z当微调值被初始化时它甚至调用setOnItemSelectedListener方法。你可以把调试器和检查。

其次经常检查其微调或小工具越来越事件,你的情况为你微调可以做这样的

public void onItemSelected(AdapterView<?> parent, View view, int position, 
           long id) { 

    Spinner clickedSpinner = (Spinner) parent; 

    switch (clickedSpinner.getId()) { 
     case R.id.spinner1: 
      // your code for spinner1 
      String str = spinner1.getSelectedItem().toString(); 
      break; 
    } 
} 

因此改变你的代码,看看它的工作与否。希望它能帮助你...

+0

'Spinner clickedSpinner =(Spinner)parent;'这一行是否意味着设置哪个微调器作为决定其下的孩子值的父项? – whoami

+0

@whoami没有把视图投射到微调器上。 Adapterview就像抽象的父类,所以你可以投入特定的子类。在这种情况下铸造成微调。 – androidnoobdev

+0

我认为它现在起作用了。还有一个问题。如果我点击一个按钮,它会得到spinners的值。我如何访问itemselected类中的值? – whoami