Java 从列表填充微调器
我在用Java 从列表填充微调器,java,android,Java,Android,我在用列表类型填充微调器时遇到一些困难 目标:按下主菜单上的按钮时,它执行任务GetTownsTask,该任务在新屏幕上填充微调器,但在设置适配器时它会中断 MainActivity.java private class GetTownsTask extends AsyncTask<Void, Void, List<String>> { @Override protected List<String> doInBackground(Void..
列表
类型填充微调器
时遇到一些困难
目标:按下主菜单上的按钮
时,它执行任务GetTownsTask,该任务在新屏幕上填充微调器
,但在设置适配器
时它会中断
MainActivity.java
private class GetTownsTask extends AsyncTask<Void, Void, List<String>> {
@Override
protected List<String> doInBackground(Void... p) {
// api calls
List<String> towns = new ArrayList<String>();
// populate towns
return towns;
}
@Override
protected void onPostExecute(List<String> townList) {
Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_spinner_dropdown_item,
townList.toArray( new String[0] ));
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter); // line 124, breaks here
}
}
微调器屏幕
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#787878">
<Spinner
android:id="@+id/spinner"
android:layout_width="200dip"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/townTextView"
android:layout_below="@+id/townTextView"
android:layout_marginTop="10dp" />
</RelativeLayout>
问题在于townList.toArray(新字符串[0])
。尝试使用townList.toArray()
,这将确保创建的字符串数组与townList的大小相同 //像这样填充微调器
package com.javasamples;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
public class ArrayAdapterDemo2 extends Activity implements
AdapterView.OnItemSelectedListener {
TextView selection;
String[] items = { "this", "is", "a", "really",
"really2", "really3",
"really4", "really5", "silly", "list" };
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
selection = (TextView) findViewById(R.id.selection);
Spinner spin = (Spinner) findViewById(R.id.spinner);
spin.setOnItemSelectedListener(this);
ArrayAdapter aa = new ArrayAdapter(
this,
android.R.layout.simple_spinner_item,
items);
aa.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(aa);
}
public void onItemSelected(AdapterView<?> parent, View v, int position,
long id) {
selection.setText(items[position]);
}
public void onNothingSelected(AdapterView<?> parent) {
selection.setText("");
}
}//class
package com.javasamples;
导入android.app.Activity;
导入android.os.Bundle;
导入android.view.view;
导入android.widget.AdapterView;
导入android.widget.ArrayAdapter;
导入android.widget.Spinner;
导入android.widget.TextView;
公共类ArrayAdapterDemo2扩展了活动实现
AdapterView.OnItemSelectedListener{
文本视图选择;
String[]items={“this”、“is”、“a”、“really”,
“really2”、“really3”,
“really4”、“really5”、“傻”、“列表”};
@凌驾
创建公共空间(捆绑冰柱){
超级冰柱;
setContentView(R.layout.main);
selection=(TextView)findViewById(R.id.selection);
微调器旋转=(微调器)findViewById(R.id.Spinner);
spin.setOnItemSelectedListener(此);
ArrayAdapter aa=新的ArrayAdapter(
这
android.R.layout.simple\u微调器\u项,
项目);
aa.setDropDownViewResource(
android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转适配器(aa);
}
已选择公共位置(AdapterView父视图、视图v、内部位置、,
长id){
selection.setText(项目[位置]);
}
未选择公共无效(AdapterView父级){
selection.setText(“”);
}
}//阶级
这肯定会对你有所帮助
谢谢:)
这假设townList实际上是在doInBackground()
中填充的,并且它的返回值被传递到onPostExecute(townList)
可能是微调器
为null
。将其添加到XML
文件中?spinner
为空,如果没有任何额外的代码,很难说为什么。顶部有towns,但您正在调用townList.toArray()。您是否通过在onPostExecute方法内部进行调试来检查townList是否不为null?@M Mohsin Naeem-我确实将其添加到了我的xml中,否则代码将如何找到它@ThinkStip-townList在onPostExecute()中不为空,onPostExecute()是MainActivity.java
townList.toArray()
中的第124行,必须使用字符串[]强制转换,这导致了此错误java.lang.ClassCastException:java.lang.Object[]无法强制转换为java.lang.String[]
您看到问题了吗?因为他没有提供完整的代码,所以它不包含“townList”变量。我鼓励你尽快帮助别人
package com.javasamples;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
public class ArrayAdapterDemo2 extends Activity implements
AdapterView.OnItemSelectedListener {
TextView selection;
String[] items = { "this", "is", "a", "really",
"really2", "really3",
"really4", "really5", "silly", "list" };
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
selection = (TextView) findViewById(R.id.selection);
Spinner spin = (Spinner) findViewById(R.id.spinner);
spin.setOnItemSelectedListener(this);
ArrayAdapter aa = new ArrayAdapter(
this,
android.R.layout.simple_spinner_item,
items);
aa.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spin.setAdapter(aa);
}
public void onItemSelected(AdapterView<?> parent, View v, int position,
long id) {
selection.setText(items[position]);
}
public void onNothingSelected(AdapterView<?> parent) {
selection.setText("");
}
}//class
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_spinner_dropdown_item,
townList.toArray( new String[0] ));
ArrayAdapter<String> adapter = new ArrayAdapter<String>(
MainActivity.this,
android.R.layout.simple_spinner_dropdown_item,
townList);