当打开一个包含ListView的类时,应用程序崩溃
我有以下类,正如你看到的,它包含一个EditText,Button和列表。 我希望用户在EditText上键入一些文本,单击搜索并显示了从当打开一个包含ListView的类时,应用程序崩溃
SQLite database in the list below the button/edittext field.
public class FindOrder extends ListActivity {
private List<String> arr;
private ListView listView;
Button search;
EditText search_field;
String search_val;
SQLiteDatabase db = null;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.find_order);
// TODO Auto-generated method stub
Log.e("myTag","in func");
search = (Button) findViewById(R.id.search_button);
search_field = (EditText) findViewById(R.id.search_field);
search.setOnClickListener(
new View.OnClickListener() {
public void onClick(View view) {
search_val=search_field.getText().toString();
//getOrder(search_val);
}
});
}
public void getOrder(String val) {
Log.e("myTag","in func");
String query;
String[] s_arr = new String[1];
listView = (ListView) findViewById(R.id.listView);
ArrayAdapter<String> adapter;
arr = new ArrayList<String>();
db = this.openOrCreateDatabase("DBname", MODE_PRIVATE, null);
query="SELECT OrderName, OrderLink, DateYear, DateMonth, DateDay, OrderPrice FROM Orders where OrderName=?";
s_arr[0]=val;
Cursor c = db.rawQuery(query, s_arr);
if (c != null) {
if (c.moveToFirst()) {
do {
arr.add(c.getString(c.getColumnIndex(DatabaseHelper.colName)));
Log.e("myTag",c.getString(c.getColumnIndex(DatabaseHelper.colName)));
} while (c.moveToNext());
}
}
c.close();
//setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,arr));
adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, arr);
listView.setAdapter(adapter);
TextView textview = new TextView(this);
LinearLayout ll2 = (LinearLayout)findViewById(R.id.linearLayout2);
ll2.addView(textview);
}
}
结果目前每当我在主菜单按钮导致本次活动点击,我得到一个FC。 一个错误,我可以看到我的日志是:
06-02 10:32:18.387: E/AndroidRuntime(1904): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.Sagi.MyOrders/com.Sagi.MyOrders.FindOrder}: java.lang.RuntimeException: Your content must have a ListView whose id attribute is 'android.R.id.list'
与许多其他错误
一起。 但我不明白为什么我应该有.LIST属性...
XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<LinearLayout
android:id = "@+id/linearLayout1"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<EditText
android:id="@+id/search_field"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:ems="10" >
</EditText>
<Button
android:id="@+id/search_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Search" />
</LinearLayout>
<LinearLayout
android:id = "@+id/linearLayout2"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</LinearLayout>
<ListView
android:id="@+id/listView"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
谢谢!
只需在xml文件中更改此行,您声明listview。
android:id="@android:id/list"
不需要声明listview。请尝试下面的代码。
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
请检查以下示例。
public class MyListActivity extends ListActivity {
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
String[] values = new String[] { "Android", "iPhone", "WindowsMobile",
"Blackberry", "WebOS", "Ubuntu", "Windows7", "Max OS X",
"Linux", "OS/2" };
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, values);
setListAdapter(adapter);
}
}
当您将ListActivity
扩展到您的活动时,您的列表视图ID必须为android:id="@android:id/list"
。
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
试过了,如果我在那里改变,我还必须在Java代码中进行更改,并获得相同的FC。在XML中的名称不应该改变,因为我对待它... – SagiLow
然后把你的logcat ...后改变listview编号... –
我不知道这是否已经解决或不,但我可以给意见:你无意中添加_import android.R_? –
更改的XML文件android:id="@android:id/list"
,并在Java代码中的列表视图id,
你已经使用listView = (ListView) findViewById(R.id.listView)
变化,要listView = this.getListView()
解决方法1: 在XML文件更改列表视图的ID
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
并且还在你的代码中改变这行listView =(ListView)findViewById(R.id.listView);作为
listView = (ListView) findViewById(R.id.list);
溶液2:
您的活动必须扩大活动,而不是ListActivity。
那么应该怎样得到以下代码: listView =(ListView)findViewById(???) – SagiLow
在扩展ListActivity的时候删除它。 –
已删除,没有FC ...但列表没有出现,记录被查询......但没有出现。 – SagiLow