2012-07-16 64 views
0

我目前有一個Android ListView類,它顯示大約20個主題(字符串)的列表。我需要能夠點擊列表中的每個按鈕,然後使用該按鈕打開特定於該主題的視圖。從Android ListView啓動一個活動並根據選擇進行填充

例如,如果這是一個配方列表,那麼所有配方視圖的佈局可能是相同的,但是當用戶從列表中點擊特定配方時,程序必須將該配方加載到通用佈局並將用戶引入該視圖。

我有OnItemClickListener工作我認爲,但我不知道如何實現其餘。

我需要爲每個配方制定新的活動和佈局嗎?有沒有一個更簡單的方法來實現這一點,而無需製作幾十個相同的佈局和活動文件?

另外,我將如何使用配方填充視圖?

非常感謝任何有幫助的想法!

---一些相關代碼:該列表視圖活動代碼

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> 

回答

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")); 

數組列表,並使用ArrayList的在列表中的適配器。

然後在你的onItemClickListener you'l需要像

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

在你的食譜顯示類剛剛收到的意圖和使用對象來填充你的活動領域。

Intent intent = getIntent(): 
intent.getSerializableExtra("recipe"); 
+0

太棒了!非常感謝您的快速回復!我會嘗試的! – Jonstewart 2012-07-16 19:20:48

0

我認爲你會想要做在新的活動中打開配方,這可以有一個標準的「配方」視圖。

要將數據傳遞到新的活動,您可以將附加內容(請參閱API文檔中的Intents and Intent Filters- Extras)添加到將啓動新活動的Intent。你可以傳遞一個int或一個String來標識你想要的配方。

傳遞演員在意圖基本輪廓是:

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

那麼,在新的活動,你可以得到這些值:

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

使用該值來加載從配方任何您從中獲取數據的來源,並且您應該全部設置!

+0

太棒了!非常感謝您的快速回復!我會嘗試的! – Jonstewart 2012-07-16 19:20:31

相關問題