我有一个活动,我希望它使用ListView显示数据库的结果。该表有三列:单词,描述和类别。在活动页面上,我有一个从数组中读取的类别列表。我想进行设置,以便在单击列表中的项目时(例如Cat1),从光标返回的结果将是DB中类别为Cat1的所有单词/描述。目前,只需点击即可显示该类别名称的Toast。
就像现在一样,活动无法正常运行。我在网上看过,不知道该怎么办。这是我到目前为止的代码。如果有人可以帮助我,我会非常感激。
public class Categories扩展ListActivity { DataBaseHelper db = new DataBaseHelper(this); 私有SQLiteDatabase数据; int position;
private ListView list;
private String[] categories = {
"C1", "C2", "C3", "C4",
"C5", "C6", "C7", "C8",
"C9", "C10", "C11", "C12"
};
@Override
public void onCreate(Bundle icicle){
super.onCreate(icicle);
setContentView(R.layout.cat_list);
list = (ListView)findViewById(R.id.cat_listing);
list.setAdapter(new ArrayAdapter<String>(this,
R.layout.categories, categories));
list.setTextFilterEnabled(true);
Cursor cursor = data.rawQuery("SELECT term, desc FROM words WHERE cat = '" + categories[position] + "'", null);
startManagingCursor(cursor);
String columns[] = new String[] { "term", "desc" };
int[] to = new int[] { R.id.cat_term, R.id.cat_desc };
SimpleCursorAdapter myAdapter = new SimpleCursorAdapter(this, R.layout.cat_result, cursor, columns, to);
this.setListAdapter(myAdapter);
list.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView<?> parent, View view,
int position, long id){
CharSequence text = categories[position];
Toast toast = Toast.makeText(getApplicationContext(),
text, Toast.LENGTH_SHORT);
toast.show();
}
});
}
}
答案 0 :(得分:4)
我的应用程序中有类似的功能。您需要创建一个XML文件来定义列表的布局,并在您的Java代码中调用它们。
以下是XML示例:
LIST:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1" >
</ListView>
<TextView
android:id="@+id/android:empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/no_projects"
android:padding="10dp"
android:textSize="16sp"
android:textStyle="bold" >
</TextView>
</LinearLayout>
这是自定义布局XML。我称之为list_rows:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical" >
<TextView
android:id="@+id/text1"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/text2"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
<TextView
android:id="@+id/text3"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
</TextView>
</LinearLayout>
这是JAVA代码:
String[] fields = new String[] { db.TABLE_PRJ_NAME, db.TABLE_PRJ_TYPE, db.TABLE_PRJ_DESC };
int[] views = new int[] { /*android.R.id.text1*/ R.id.text1, R.id.text2, R.id.text3 };
c = db.getAllProjects();
startManagingCursor(c);
// Set the ListView
SimpleCursorAdapter prjName = new SimpleCursorAdapter(
this,
R.layout.project_list_rows,
//android.R.layout.simple_list_item_1,
c, fields, views);
setListAdapter(prjName);
onListItemClickListener
// This section of code is for handling the Click Event of the Projects List
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Cursor o = (Cursor) this.getListAdapter().getItem(position);
String projectName = o.getString(1);
Intent showProjectDetails = new Intent(this, ProjectDetails.class);
Bundle bundle = new Bundle();
bundle.putString("sendProjectName", projectName);
showProjectDetails.putExtras(bundle);
startActivity(showProjectDetails);
}
代码的新部分是通过意图将所选项目发送到另一个活动。然后在新活动中,我使用捆绑中选定的项目名称查询数据库并显示结果。
请询问您是否需要进一步解释。
答案 1 :(得分:0)
我正在制作一个非常相似的节目。作为我的第一个android / java程序,我遇到了麻烦。我得到的帮助来自网络和我的继父用来教java。
在帮我设置数据库时,他解释了设置我的表格,以便类别与其下的项目配对。因此,您将拥有一个类别表,包括您将为该类别显示的标题以及主键。然后你需要一个从类别下来的下一级别的表,比如标题。这将包括标题和主键的文本。接下来,您需要创建另一个表来配对它们。标题键,类别键和主键。
从那里你需要告诉java根据最后一张表将它们配对。
我是一个菜鸟很抱歉我无法提供更多/更好的信息。但是我在这个问题上找到的任何东西都会发布在这里,祝你好运。