如何在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;
}
}
首先! 你在哪里设置了第一个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点击物品,微调成为再次填充,因为ü单击每次设定一个新的适配器给它。
似乎微调2不读取微调1内容与此代码。可能原因是,当选择微调1项目时,微调2从txt文件中获取其内容? – user3248624 2014-11-05 16:14:39
你是否希望在你从微调框2中选择一个项目并将其显示在文本视图中之后,获得所选的微调框项目? – 2014-11-06 06:38:10
是的!首先,我选择spinner1 - 食品类别,然后是微调器2.在txt文件中,有一种食品具有卡路里。我的最终解决方案应该是它显示spinner 2中的textview和产品名称中的卡路里。但我只是喜欢让它像这样至少工作,所以我可以继续开发它。因此从spinner1选择项目(选择更改微调器2内容),然后选择微调器2。并且我在微调2中选择的项目将出现在textview中。 – user3248624 2014-11-06 11:46:39
同样的问题,其他答案了!现在spinner2不显示(实际上任何内容)微调器1的选择。 – user3248624 2014-11-06 15:06:00