Android 在我实现Spinner setOnItemSelectedListener后,我的应用程序崩溃了
首先澄清一下,我是Java和Android的新手,而且我仍处于一个繁重的学习过程中 无论如何 我正在开发一个简单的停车短信应用程序,我一直在使用Spinner和TextView 基本上,我正在尝试这样做:当我从微调器中选择一个停车区(它有五个停车区)时,我希望将停车区描述填充到布局中微调器下方的文本视图中 微调器有自己的StringArray,而停车场区域描述都在自己的字符串中 看起来是这样的: activity_glavni.xmlAndroid 在我实现Spinner setOnItemSelectedListener后,我的应用程序崩溃了,android,crash,textview,spinner,Android,Crash,Textview,Spinner,首先澄清一下,我是Java和Android的新手,而且我仍处于一个繁重的学习过程中 无论如何 我正在开发一个简单的停车短信应用程序,我一直在使用Spinner和TextView 基本上,我正在尝试这样做:当我从微调器中选择一个停车区(它有五个停车区)时,我希望将停车区描述填充到布局中微调器下方的文本视图中 微调器有自己的StringArray,而停车场区域描述都在自己的字符串中 看起来是这样的: activity_glavni.xml <RelativeLayout xmlns:andro
<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:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin" tools:context=".Glavni">
<ScrollView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/scrollView" >
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"></LinearLayout>
</ScrollView>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="@string/txGrad"
android:id="@+id/txOdaberiteGrad"
android:layout_alignParentTop="true"
android:layout_alignParentStart="true" />
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/spinnergradovi"
android:layout_below="@+id/txOdaberiteGrad"
android:layout_alignParentStart="true"
android:layout_marginTop="23dp" />
<Space
android:layout_width="20px"
android:layout_height="20px"
android:id="@+id/space" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/txZona"
android:text="@string/txZona"
android:layout_below="@+id/spinnergradovi"
android:layout_alignParentStart="true" />
<Spinner
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/spinnerZona"
android:layout_below="@+id/txZona"
android:layout_alignParentStart="true"
android:layout_marginTop="23dp" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:id="@+id/txPrikazZone"
android:layout_below="@+id/spinnerZona" />
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/editTextRegistracija"
android:layout_below="@+id/txPrikazZone"
android:layout_alignParentStart="true"
android:hint="Unesite broj registracije" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/btn_posalji"
android:id="@+id/btn_posalji"
android:layout_below="@+id/editTextRegistracija"
android:layout_alignParentStart="true"
android:layout_marginTop="33dp"
android:layout_alignParentEnd="false"
/>
strings.xml
<resources>
<string name="app_name">ParkingZagreb</string>
<string name="action_settings">Settings</string>
<string name="txGrad">Odaberite grad</string>
<string name="txZona">Odaberite zonu</string>
<string name="btn_posalji">Pošalji SMS!</string>
<string-array name="gradovi">
<item>Zagreb</item>
<item>Velika Gorica</item>
<item>Zaprešić</item>
</string-array>
<string-array name="zone">
<item>Prva zona</item>
<item>Druga zona</item>
<item>Treća zona</item>
<item>Četvrta zona (1)</item>
<item>Četvrta zona (2)</item>
</string-array>
<string-array name="opisi_zona">
<item>6 kn/h, maksimalno 2 h</item>
<item>3 kn/h, maksimalno 3 h</item>
<item>1,5 kn/h, bez ograničenja</item>
<item>5 kn/dan, 7-16 h</item>
<item>10 kn/dan, 7-20 h</item>
</string-array>
萨格勒布公园酒店
设置
奥达贝利特梯度
奥达贝里岩带
波沙尔吉短信!
萨格勒布
韦利卡·戈里卡
扎普雷舍维奇
Prva地带
带状药物
特雷奇亚区
Četvrta zona(1)
Četvrta zona(2)
6 kn/h,maksimalno 2 h
3 kn/h,maksimalno 3 h
1.5 kn/h,bez ograničenja
5千牛/担,7-16小时
10千牛/担,7-20小时
Glavni.java
public class Glavni extends ActionBarActivity {
public TextView txPrikazZone;
private Button btn_posalji;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_glavni);
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
btn_posalji = (Button) findViewById(R.id.btn_posalji);
btn_posalji.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog alertDialog = new AlertDialog.Builder(Glavni.this).create();
alertDialog.setTitle("SMS poslan!");
alertDialog.setMessage("Provjerite SMS aplikaciju. Poruka bi trebala doći za nekoliko trenutaka.");
alertDialog.setButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
alertDialog.show();
}
});
// the first city selection Spinner
Spinner spinner_gradovi = (Spinner) findViewById(R.id.spinnergradovi);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
this, R.array.gradovi, android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spinner_gradovi.setAdapter(adapter);
// the second Spinner with parking zones
final Spinner spinner_zona = (Spinner) findViewById(R.id.spinnerZona);
ArrayAdapter<CharSequence> adapter2 = ArrayAdapter.createFromResource(
this, R.array.zone, android.R.layout.simple_spinner_item);
adapter2.setDropDownViewResource(
android.R.layout.simple_spinner_dropdown_item);
spinner_zona.setAdapter(adapter2);
// this is where I'm trying to populate the TextView with the String-Array by selecting an item from the second Spinner
final String[] opisi_zona = getResources().getStringArray(R.array.opisi_zona);
spinner_zona.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
txPrikazZone.setText(opisi_zona[position]);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_glavni, 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();
//noinspection SimplifiableIfStatement
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
公共类Glavni扩展了ActionBarActivity{
公共文本视图TXPRIKAZONE;
私人按钮btn_posalji;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_glavni);
this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT\u输入\状态\始终\隐藏);
btn_posalji=(按钮)findviewbyd(R.id.btn_posalji);
btn_posalji.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
AlertDialog AlertDialog=新建AlertDialog.Builder(Glavni.this.create();
setTitle(“SMS poslan!”);
alertDialog.setMessage(“Provjerite SMS aplikaciju.Poruka bi trebala doći za nekoliko trenutaka.”);
alertDialog.setButton(“确定”,新的DialogInterface.OnClickListener(){
@凌驾
public void onClick(DialogInterface dialog,int which){
}
});
alertDialog.show();
}
});
//第一个城市选择微调器
Spinner Spinner_gradovi=(Spinner)findViewById(R.id.spinnergradovi);
ArrayAdapter=ArrayAdapter.createFromResource(
这个,R.array.gradovi,android.R.layout.simple\u spinner\u item);
adapter.setDropDownViewResource(
android.R.layout.simple\u微调器\u下拉菜单\u项);
spinner_gradovi.设置适配器(适配器);
//带停车区的第二个微调器
最终纺纱机纺纱机_zona=(纺纱机)findViewById(R.id.spinnerZona);
ArrayAdapter适配器2=ArrayAdapter.createFromResource(
这个,R.array.zone,android.R.layout.simple\u微调器\u项);
adapter2.setDropDownViewResource(
android.R.layout.simple\u微调器\u下拉菜单\u项);
旋转器分区设置适配器(适配器2);
//这就是我试图通过从第二个微调器中选择一个项来用字符串数组填充TextView的地方
最后一个字符串[]opisi_zona=getResources().getStringArray(R.array.opisi_zona);
微调器_zona.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
txPrikazZone.setText(opisi_zona[位置]);
}
@凌驾
未选择公共无效(AdapterView父级){
}
});
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.menu_glavni,menu);
返回true;
}
@凌驾
公共布尔值onOptionsItemSelected(菜单项项){
//处理操作栏项目单击此处。操作栏将
//自动处理Home/Up按钮上的点击,只要
//在AndroidManifest.xml中指定父活动时。
int id=item.getItemId();
//noinspection SimplifiableIf语句
if(id==R.id.action\u设置){
返回true;
}
返回super.onOptionsItemSelected(项目);
}
}
感谢您的帮助…您的适配器两个微调器都是一样的 编辑 首先尝试将ZonaX字符串包装到字符串数组中
<string-array name="zonas">
...
</string-array>
...
现在在代码中更改ItemSelectedListener的集合
final String[] zonas = getResources().getStringArray(R.array.zonas);
spinner_zona.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
txPrikazZone.setText(zonas[position]);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
}
final String[]zonas=getResources().getStringArray(R.array.zonas);
微调器_zona.setOnItemSelectedListener(新的AdapterView.OnItemSelectedListener(){
@凌驾
已选择公共视图(AdapterView父视图、视图视图、整型位置、长id){
TXPRIKAZONE.setText(分区[位置]);
}
@凌驾
未选择公共无效(AdapterView父级){
}
}
空指针的原因是您尚未初始化txPrikazZone
,并且正在尝试调用setText
您需要在onCreate
方法中初始化它,如下所示:
txPrikazZone=(TextView)findViewById(R.id.txPrikazZone);
我希望这能有所帮助。我刚刚为第二个微调器重命名了适配器,但它仍在崩溃。谢谢你的建议。我不知道我做错了什么,但它不会让我选择“getStringArray”。我只能选择“getStringArray”,它不起作用。我也尝试了getResources,但没有成功。它在下面加了下划线,并显示“将变量…更改为java.lang.String。”很抱歉,我忘记了getStringArray()之前的getResources(),请再次检查我的编辑。非常感谢,但仍然不走运。它仍在崩溃。看起来,它在“at com.example.igor.parkingzagreb.Glavni$2.onimselected(Glavni.java:87)”上设置了一个错误,即“txPrikazZone.setText(opisi_zona[position]”]);”。我在布局中选中了TextView。它的“text”属性为空(因为文本应该从字符串数组中提取)