我是android的新手,目前是我在I.t的第二年。
我正在购买一个购物清单应用项目,在那里我显示一个杂货清单供用户选择并在下一个屏幕上显示(屏幕2)。
我遇到的问题是,当我单击“显示列表”按钮时,它会显示所选复选框的索引而不是显示的文本...我尝试使用ListActivity在CheckedTextView中显示数组但是也没有成功(复选框在选中时没有检查)。
我真的很感激如何显示所选文本而不是复选框选择的索引,并希望知道我哪里出错。
以下是2个屏幕的Java和XML代码..
Java编码 - 屏幕1
package com.allmycode.lists;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.CheckBox;
import android.widget.LinearLayout;
public class MainActivity extends Activity {
static CheckBox[] checkBoxes = new CheckBox[18];
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
LinearLayout layout =
(LinearLayout) findViewById(R.id.linearLayout);
for (int i = 0; i < 18; i++) {
checkBoxes[i] = new CheckBox(this);
layout.addView(checkBoxes[i]);
}
checkBoxes[0].setText("Baking Ingredients");
checkBoxes[1].setText("Beverages");
checkBoxes[2].setText("Canned Foods");
checkBoxes[3].setText("Cereal");
checkBoxes[4].setText("Dairy");
checkBoxes[5].setText("Detergents");
checkBoxes[6].setText("Frozen Vegetables");
checkBoxes[7].setText("Fruit");
checkBoxes[8].setText("Broad Beans");
checkBoxes[9].setText("Herbs");
checkBoxes[10].setText("Legumes");
checkBoxes[11].setText("Meat");
checkBoxes[12].setText("Pasta");
checkBoxes[13].setText("Pet Food");
checkBoxes[14].setText("Rice");
checkBoxes[15].setText("Snacks");
checkBoxes[16].setText("Toiletries");
checkBoxes[17].setText("Vegetables");
}
public void onShowListClick(View view) {
Intent intent =
new Intent(this, MyListActivity.class);
startActivity(intent);
}
}
XML编码 - 屏幕1
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id="@+id/linearLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</TextView>
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onShowListClick"
android:text="@string/show_list" >
</Button>
Java编码 - 屏幕2
package com.allmycode.lists;
import java.util.ArrayList;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
public class MyListActivity extends ListActivity {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ArrayList<Integer> listItems =
new ArrayList<Integer>();
for (int i = 0; i < 18; i++) {
if (MainActivity.checkBoxes[i].isChecked()) {
listItems.add(i);
}
}
setListAdapter(new ArrayAdapter <Integer> (this,
R.layout.my_list_layout, listItems));
}
}
XML编码 - 屏幕2
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android=
"http://schemas.android.com/apk/res/android"
android:id="@+id/identView"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
</TextView>
答案 0 :(得分:0)
您只需设置索引,因此发生了什么事情是有道理的:
ArrayList<Integer> listItems = new ArrayList<Integer>(); // <-- List of Integers
for (int i = 0; i < 18; i++) {
if (MainActivity.checkBoxes[i].isChecked()) {
listItems.add(i); // <-- You're adding an integer to the List
}
}
请改为尝试:
ArrayList<String> listItems = new ArrayList<String>(); // <-- List of Strings
for (int i = 0; i < 18; i++) {
if (MainActivity.checkBoxes[i].isChecked()) {
listItems.add(MainActivity.checkBoxes[i].getText()); // Set it to the text of the Checkbox, not the integer index in the loop
}
}
setListAdapter(new ArrayAdapter<String> (this, R.layout.my_list_layout, listItems));
答案 1 :(得分:0)
如果您使用常规Java类,Guardanis的答案在技术上是正确的。然而,Android Activity
类不是常规Java类。
永远不要尝试从任何其他应用组件访问一个Activity
中的字段或方法。在某些情况下,可能工作但是这种方法会破坏Activity
模型,如果继续沿着那条线继续,即假设Activity
只是一个普通的Java类,那么指出你的应用会崩溃和燃烧。
正确执行操作的方法是在启动MyListActivity之前,使用MainActivity中的代码确定选中的复选框。然后,您需要将此信息作为Intent
个附加内容传递给MyListActivity,或者将数据保存在SharedPreferences
中或使用其他方式共享数据。