我是 Android 新手,目前是我在 I.t. 工作的第二年。
我正在开发一个杂货 list 应用程序项目,我在其中显示杂货列表,供用户选择并在下一个屏幕(屏幕 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>
您只是设置索引,因此发生的情况是有意义的:
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));
我是一名优秀的程序员,十分优秀!