2014-11-05 53 views
0

我的第二個微調控件內容(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); 
     } 
    } 

回答

0

試試這種方式,希望這會幫助你解決你的問題。 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

0

首先! 你在哪裏設置了第一個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

相關問題