我需要在屏幕上显示一个文本项列表,并使它们可以点击。所以它就像是Web应用程序上的链接列表。
如何在Android活动屏幕中执行此操作?
我必须从数据库中提取一些随机数量的项目,并将所有项目显示为链接。
知道如何做到这一点?
答案 0 :(得分:9)
您应该阅读有关ListActivity,ListView的文档并按照Hello ListView tutorial进行操作。
答案 1 :(得分:9)
是的,你可以做到。创建一个DataExchange类以从Db中获取它。 将字符串存储在数组中。
创建一个ArrayAdapter以显示从数据库中获取的字符串数组。
例如
public class AndroidListViewActivity extends ListActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// storing string resources into Array
String[] numbers = {"one","two","three","four"}
// here you store the array of string you got from the database
// Binding Array to ListAdapter
this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label, numbers));
// refer the ArrayAdapter Document in developer.android.com
ListView lv = getListView();
// listening to single list item on click
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
// selected item
String num = ((TextView) view).getText().toString();
// Launching new Activity on selecting single List Item
Intent i = new Intent(getApplicationContext(), SingleListItem.class);
// sending data to new activity
i.putExtra("number", num);
startActivity(i);
}
});
}
}
显示您单击的特定项目的secondActivity应为
public class SingleListItem extends Activity{
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.single_list_item_view);
TextView txtProduct = (TextView) findViewById(R.id.product_label);
Intent i = getIntent();
// getting attached intent data
String product = i.getStringExtra("number");
// displaying selected product name
txtProduct.setText(product);
}
}
你必须相应地创建各种布局文件。 希望这可以帮助你:)
答案 2 :(得分:3)
您应该使用ListView
。这很简单,只需创建一个ListActivity
,将您的项目放在Adapter
中,然后将其设置为Adapter
的{{1}}。
您可以阅读有关ListView here
的更多信息答案 3 :(得分:1)
还有一种名为ListFragment的新范例。
我之前使用过ListViews,但现在更喜欢片段方法 - 它只是非常直接且非常灵活的平板电脑,因为在选择项目时与屏幕上的另一个区域的交互非常灵活,只需要非常少的代码。 / p>
只是一个例子:
public class Select_FoodCategories_Fragment extends android.app.ListFragment {
private static final boolean DEBUG = true;
@Override
public void onCreate(Bundle savedInstanceState) {
if (DEBUG)
Log.i(this.getClass().getSimpleName(), " ->"
+ Thread.currentThread().getStackTrace()[2].getMethodName());
super.onCreate(savedInstanceState);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
if (DEBUG)
Log.i(this.getClass().getSimpleName(), " ->"
+ Thread.currentThread().getStackTrace()[2].getMethodName());
HoldingActivity a = (HoldingActivity) getActivity();
//accessing a variable of the activity is easy
a.visibleListViewInFragment = getListView();
List<XYZ> listTodisplay = a.getListToDisplay();
MyAdapter adapter = new MyAdapter(
getActivity(), 0, listTodisplay);
setListAdapter(adapter);
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
if (DEBUG)
Log.i(this.getClass().getSimpleName(), " ->"
+ Thread.currentThread().getStackTrace()[2].getMethodName());
XYZ item = (XYZ) getListAdapter()
.getItem(position);
}
}
此处有更多信息:http://developer.android.com/reference/android/app/ListFragment.html
顺便说一下,我觉得熟悉新的片段概念真的很值得 - 它让生活变得更加容易 - 特别是平板电脑!
ps我故意离开调试语句 - 因为它有助于我在经验中更快地理解整个概念