0

我目前有一个 Android ListView 类,它显示了大约 20 个主题(字符串)的列表。我需要能够单击列表上的每个按钮并让该按钮打开特定于该主题的视图。

例如,如果这是一个菜谱列表,那么所有菜谱视图的布局可能是相同的,但是当用户从列表中单击特定菜谱时,程序必须将该菜谱加载到通用布局中并将用户查看该视图。

我认为我有 OnItemClickListener 工作,但我不确定如何实现其余部分。

每个食谱我都需要一个新的活动和布局吗?有没有更简单的方法来实现这一点,而无需制作数十个相同的布局和活动文件?

另外,我将如何使用配方填充视图?

非常感谢任何有用的想法!

--- 一些相关代码:Listview 活动代码

listAdapter = new ArrayAdapter<String>(this, R.layout.simplerow, studiesList);  

    // Set the ArrayAdapter as the ListView's adapter.  
    mainListView.setAdapter( listAdapter );    
    mainListView.setClickable(true);
    mainListView.setOnItemClickListener(new OnItemClickListener(){

        public void onItemClick(AdapterView<?> a, View view, int position, long id) { 

            switch( position )
            {
               case 0:  Intent intent = new Intent(StudyActivity.this, pos.class); 
                        startActivity(intent);
                        break;

SimpleRow.xml 文件:(列表的按钮)

<?xml version="1.0" encoding="utf-8"?>
<Button xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</Button>
4

2 回答 2

0

我想你会想要做的是在一个新的活动中打开食谱,它可以有一个标准的“食谱”视图。

要将数据传递给新 Activity,您可以向将启动新 Activity 的 Intent 添加额外内容(请参阅Intent 和 Intent Filters- API 文档中的 Extras)。您可以传递一个 int 或一个 String 来标识您想要的配方。

在 Intent 中传递 extra 的基本大纲是:

Intent intent = new Intent(this, NextActivity.class);
intent.putExtra("EXTRA_ID", data);
startActivity(intent);

然后,在新的 Activity 中,您可以获得这些值:

Bundle extras = getIntent().getExtras();
if(extras.hasExtra("EXTRA_ID")) {
    int value = extras.getString("EXTRA_ID");
}

使用该值从您获取数据的任何来源加载配方,您应该一切就绪!

于 2012-07-16T19:01:02.847 回答
0

您需要做的是创建一个具有一些属性的可序列化配方类,然后为 20 个配方中的每一个创建该类的新对象。

我想你会有类似的东西

public class Recipe extends Serializable{ 
private String name; 
private String ingredients; 

public Recipe(String name, String ingredients){
this.name = name;
this.ingredients = ingredients;
}

}

然后制作这些对象的数组列表

ArrayList<Recipe> recipes = new ArrayList<Recipe>();
recipes.add(new Recipe("Chicken Curry", "Random cooking instructions"));

并在您的列表适配器中使用该数组列表。

然后在您的 onItemClickListener 中,您需要类似

Intent i = new Intent(this, recipeDisplay.class)
i.putExtra("recipe",  listAdapter.getItemAtPosition(position)); 

并在您的食谱显示类中接收意图并使用该对象来填充您的活动字段。

Intent intent = getIntent():
intent.getSerializableExtra("recipe");
于 2012-07-16T19:11:58.613 回答