简单地说,我创造了一个微调器。我的array.xml
中有微调条目和条目值。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="select">
<item>a</item>
<item>b</item>
<item>c</item>
</string-array>
<integer-array name="selectValues">
<item>1</item>
<item>2</item>
<item>3</item>
</integer-array>
</resources>
这是我的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="vertical"
android:id="@+id/selectLayout"
>
<TextView
android:id="@+id/tvSelect"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:text="@string/select"
android:textSize="18sp"
android:layout_gravity="center"
/>
<Spinner
android:id="@+id/sSelect"
android:layout_width="179dp"
android:layout_height="60dp"
android:layout_gravity="center"
android:entries="@array/select"
android:prompt="@string/sec"
android:spinnerMode="dialog"
/>
</LinearLayout>
在我的活动中,我创建了OnItemSelectedListener
,当用户选择的项目我要更改TextView
时。我认为使用开关时存在问题。
这是活动。
public class Select extends Activity implements OnItemSelectedListener{
int[] itemValues;
TextView t;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
Resources rsc = getResources();
itemValues = rsc.getIntArray(R.array.selectValues);
t = (TextView) findViewById(R.id.tvSelect);
setContentView(R.layout.select);
Spinner form = (Spinner) findViewById(R.id.sSelect);
form.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> item, View which, int sort,
long arg3) {
// TODO Auto-generated method stub
switch(which.getId())
{
case R.id.sSelect:
int value = itemValues[sort];
t.setText(value);
break;
}
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
// TODO Auto-generated method stub
}
}
如何解决这个问题?
编辑:当我尝试删除切换时,我收到unfortunately has stopped
错误。
答案 0 :(得分:1)
正如Spring Breaker所说,你需要在致电setContentView()
之前致电findViewById()
。如果您先致电findViewById()
,它将返回null,并且您在尝试使用NullPointerException
时获得TextView
。
在onItemSelected()
中,which
实际上并不是对Spinner
的引用。它是对Spinner
的子视图的引用,它包含用户按下的特定项。您需要切换第一个参数AdapterView<?>
。
setText()
要求String
或int
资源值引用XML字符串。您传递的是int
,但不是资源值,因此无效。这是一个快速的解决方法:
String value = String.valueOf(itemValues[position]);
t.setText(value);
答案 1 :(得分:0)
which.getId()返回在微调器中选择的项的id,而不是微调器的ID,R.id.sSelect是微调器的id
答案 2 :(得分:0)
这样做..
form.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int sort, long arg3) {
int value = itemValues[sort];
t.setText(value);
}
});
答案 3 :(得分:0)
在定义视图之前使用setcontentview()方法
即。在这一行之前 - &gt; t =(TextView)findViewById(R.id.tvSelect);
答案 4 :(得分:0)
在引用布局文件中的任何ID之前,您必须使用setContentView(R.layout.select);
。在您的情况下,onCreate()
应如下所示,
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.select);
Resources rsc = getResources();
itemValues = rsc.getIntArray(R.array.selectValues);
t = (TextView) findViewById(R.id.tvSelect);
Spinner form = (Spinner) findViewById(R.id.sSelect);
form.setOnItemSelectedListener(this);
}
@Override
public void onItemSelected(AdapterView<?> item, View which, int sort,
long arg3) {
String SpinerValue3 = item.getItemAtPosition(sort).toString();
t.setText(SpinerValue3);
}
答案 5 :(得分:0)
switch(which.getId())
{
case R.id.sSelect:
t.setText(form.getselecteditem().tostring());
break;
}
答案 6 :(得分:0)
尝试使用t.setText(String.valueOf(value));
可能正常工作并在textview
之前设置contentview答案 7 :(得分:0)
将您的switch
语句更改为以下代码。
switch(sort)
{
case 0:
int value = itemValues[0];
t.setText(value);
break;
case 1:
int value = itemValues[1];
t.setText(value);
break;
}
答案 8 :(得分:0)
我有类似的问题。我通过实现内联侦听器并调用特定函数来解决这个问题。从调试器我了解到发送的id与spinner id
无关