如何在Textview中显示第二个微调选项?

问题描述:

我的第二个微调控件内容(spFoodProduct)取决于第一个微调控件选项(spFoodCategory)。这是完美的工作,但一旦我添加另一个setOnItemSelectedListener(this)并尝试将第二个微调器(并被点击)的值放到textview中,它就不起作用了!我需要的是textview来改变它的价值取决于我与第二个微调做出的选择。 当我选择“牛奶”时,textview应该说“牛奶”。 我该如何使它工作?如何在Textview中显示第二个微调选项?

package com.kalorid.kalorikalkulaator; 

    import java.io.BufferedReader; 
    import java.io.InputStream; 
    import java.io.InputStreamReader; 
    import java.util.ArrayList; 
    import java.util.List; 
    import android.app.Activity; 
    import android.os.Bundle; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.view.View.OnTouchListener; 
    import android.widget.AdapterView.OnItemSelectedListener; 
    import android.widget.ArrayAdapter; 
    import android.widget.Spinner; 
    import android.widget.AdapterView; 
    import android.widget.TextView; 
    import android.widget.Toast; 
    import android.widget.AdapterView.OnItemClickListener; 



    public class Categories extends Activity implements OnItemSelectedListener { 
    Spinner spFoodCategory, spFoodProduct; 


     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.activity_categories); 
      spFoodCategory = (Spinner) findViewById(R.id.spinner1); 
      spFoodProduct = (Spinner) findViewById(R.id.spinner2); 
      spFoodCategory.setOnItemSelectedListener(this); 
      spFoodProduct.setOnItemSelectedListener(this); 


     } 


     public List<String> getProducts() throws Exception { 

      String foodCategory = String.valueOf(spFoodCategory.getSelectedItem()); 
      List<String> list = new ArrayList<String>(); 
      InputStream txt = null; 
      if (foodCategory.equals("Piimatooted")) { 
       txt = getAssets().open("milkProducts"); 
      } else if (foodCategory.equals("Liha- ja kalatooted")) { 
       txt = getAssets().open("meatAndFishProducts"); 
      } else if (foodCategory.equals("Koogiviljad")) { 
       txt = getAssets().open("vegetableProducts"); 
      } else if (foodCategory.equals("Teraviljatooted")) { 
       txt = getAssets().open("cerealProducts"); 
      } 

      Toast.makeText(this, foodCategory, Toast.LENGTH_SHORT).show(); 
      BufferedReader in = new BufferedReader(new InputStreamReader(txt, "UTF-8")); 
      String str; 
      while ((str=in.readLine()) != null) { 
       list.add(str); 
      } 
      in.close(); 
      return list; 
     } 


     public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {  
      TextView kcalvaartus = (TextView) findViewById(R.id.kcalnumber1); 
      List<String> products = null; 

      try { 
       products = this.getProducts(); 


      } catch (Exception e) { 
       e.printStackTrace(); 

      } 

      //String str = spFoodProduct.getSelectedItem().toString(); 
      //kcalvaartus.setText(str); <-- Trying to setText to textview 



      ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
       android.R.layout.simple_spinner_item, products); 
      dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      dataAdapter.notifyDataSetChanged(); 
      spFoodProduct.setAdapter(dataAdapter); 

     } 

     @Override 
     public void onNothingSelected(AdapterView<?> arg0) { 
      // TODO Auto-generated method stub  
     } 

     @Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
      // Inflate the menu; this adds items to the action bar if it is present. 
      getMenuInflater().inflate(R.menu.main, menu); 
      return true; 
     } 

     @Override 
     public boolean onOptionsItemSelected(MenuItem item) { 
      // Handle action bar item clicks here. The action bar will 
      // automatically handle clicks on the Home/Up button, so long 
      // as you specify a parent activity in AndroidManifest.xml. 
      int id = item.getItemId(); 
      if (id == R.id.action_settings) { 
       return true; 
      } 
      return super.onOptionsItemSelected(item); 
     } 
    } 

试试这种方式,希望这会帮助你解决你的问题。 onItemSelected外

申报的TextView和DataAdapter指在类级,其中旋转器是声明:

TextView kcalvaartus; 
ArrayAdapter<String> dataAdapter; 

初始化的TextView中的onCreate():

kcalvaartus = (TextView) findViewById(R.id.kcalnumber1); 

检查哪个微调项选择,如果选择spFoodCategory项然后使用getProducts()初始化dataAdapter()else set kcalvaartus set text usign spFoodProduct item selected:

@Override 
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    switch (view.getId()){ 
     case R.id.spinner1 : 
      try{ 
       List<String> products = getProducts(); 
       dataAdapter = new ArrayAdapter<String>(MainActivity.this,android.R.layout.simple_spinner_item, products); 
       dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
       spFoodProduct.setAdapter(dataAdapter); 
      } catch (Exception e) { 
       e.printStackTrace(); 
      } 
      break; 
     case R.id.spinner2 : 
      kcalvaartus.setText(spFoodProduct.getSelectedItem().toString()); 
      break; 
     default: 
      break; 
    } 
} 
+0

同样的问题,其他答案了!现在spinner2不显示(实际上任何内容)微调器1的选择。 – user3248624 2014-11-06 15:06:00

首先! 你在哪里设置了第一个Spinner的适配器?!?!?!

你应该做的是这样的:

public void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
      if(arg1.getId==spFoodCategory.getId()) 
      { 
      // Do something 
      ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, products); 
      dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
      dataAdapter.notifyDataSetChanged(); 
      spFoodProduct.setAdapter(dataAdapter); 
      } 
      if(arg1.getId==spFoodProduct.getId()) 
      { 
      // Do something else 
      TextView kcalvaartus = (TextView) findViewById(R.id.kcalnumber1); 
      String str = spFoodProduct.getAdapter().getItem(arg2).toString(); 
      kcalvaartus.setText(str); <-- Trying to setText to textview 
      } 
    } 

我认为问题是,当u点击物品,微调成为再次填充,因为ü单击每次设定一个新的适配器给它。

+0

似乎微调2不读取微调1内容与此代码。可能原因是,当选择微调1项目时,微调2从txt文件中获取其内容? – user3248624 2014-11-05 16:14:39

+1

你是否希望在你从微调框2中选择一个项目并将其显示在文本视图中之后,获得所选的微调框项目? – 2014-11-06 06:38:10

+0

是的!首先,我选择spinner1 - 食品类别,然后是微调器2.在txt文件中,有一种食品具有卡路里。我的最终解决方案应该是它显示spinner 2中的textview和产品名称中的卡路里。但我只是喜欢让它像这样至少工作,所以我可以继续开发它。因此从spinner1选择项目(选择更改微调器2内容),然后选择微调器2。并且我在微调2中选择的项目将出现在textview中。 – user3248624 2014-11-06 11:46:39