2012-05-01 8 views
1

手順をレシピに表示しようとしていますが、レシピは文字列配列に格納されています。Android:文字列配列からデータを表示する別の方法はありますか?

イムテキストビューに挿入されるように、各ステップを取得し、次のコードを持ってしようとしている:私もそれが動的なので、誰もが、私はそれを行うことができます方法を知っているん作りたいと思っています

public class MethodActivity extends ListActivity{ 

ListView recipes; 
Intent myIntent; 
String value; 
TextView editvalue; 
Intent intent; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 


    setContentView(R.layout.recipemethod); 

    editvalue = (TextView)findViewById(R.id.method); 
    value = getIntent().getStringExtra("searchValue"); 
    editvalue.setText(value); 

    final String[] words = getResources().getStringArray(R.array.Lasagna); 
    final TextView tw=(TextView)findViewById(R.id.method); 
    for(int item = 0;item<words.length;item++){ 
     tw.setText(words [item]); 
    } 
    } 
} 

を? (例えば、ユーザがそのレシピがクリックされたものに応じて)。

おかげ

答えて

2

それは間違いなく、より直感的になるように...あなたも、別のListViewであなたのレシピを表示することができますユーザーのために...

これは次の行にやや行くんシンプルコード:

ファイル1:RecipeListActivity.javaは(レシピのリストが表示されます)

package com.epichorns.testproject; 

import java.util.ArrayList; 

import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 


public class RecipeListActivity extends ListActivity { 

    final Recipe[] mRecipesArray = { new Recipe("Lasagna", new String[]{"Some lasagna noodles", "Some tomato sauce"}), 
             new Recipe("PortalCake", new String[]{"GlaDOS' wit","Is a lie"}), 
             new Recipe("EarthDestruction", new String[]{"Asteroid", "Kinetic energy"})}; 


    public class Recipe{ 
     public String name; 
     public String[] steps; 

     Recipe(String name, String[] steps){ 
      this.name = name; 
      this.steps = steps; 
     } 
    } 

    public ArrayList<String> FetchRecipesRawArray(Recipe[] recipes){ 
     ArrayList<String> ret = new ArrayList<String>(); 
     for(int i=0;i<recipes.length;i++){ 
      ret.add(recipes[i].name); 
     } 
     return ret; 
    } 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, FetchRecipesRawArray(mRecipesArray)); 
     setListAdapter(adapter); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id){ 
     Intent intent = new Intent(this, RecipeActivity.class); 
     intent.putExtra(RecipeActivity.EXTRA_RECIPEARRAY, mRecipesArray[position].steps); 
     startActivity(intent); 

    } 
} 

ファイル2:RecipeActivity.java(リスト内のレシピを示している)

package com.epichorns.testproject; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.widget.ArrayAdapter; 


public class RecipeActivity extends ListActivity { 
    final static public String EXTRA_RECIPEARRAY = "recipeArray"; 

    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 

     String[] recipeArray = getIntent().getStringArrayExtra(EXTRA_RECIPEARRAY); 
     if(recipeArray!=null){ 
      if(recipeArray.length>0){ 
       ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, recipeArray); 
       setListAdapter(adapter); 
      } 
     } 
    } 
} 

代替的には、ここに示すためにレシピリストの下のTextViewを合成するコードであります別のアクティビティを開くことなく、レシピの内容:

ファイル:RecipeListActivity.java

package com.epichorns.testproject; 

import java.util.ArrayList; 

import android.app.ListActivity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 


public class RecipeListActivity extends ListActivity { 

    final Recipe[] mRecipesArray = { new Recipe("Lasagna", new String[]{"Some lasagna noodles", "Some tomato sauce"}), 
             new Recipe("PortalCake", new String[]{"GlaDOS' wit","Is a lie"}), 
             new Recipe("EarthDestruction", new String[]{"Asteroid", "Kinetic energy"})}; 

    TextView mTextView_recipeTitle; 
    TextView mTextView_recipe; 


    public class Recipe{ 
     public String name; 
     public String[] steps; 

     Recipe(String name, String[] steps){ 
      this.name = name; 
      this.steps = steps; 
     } 
    } 

    public ArrayList<String> FetchRecipesRawArray(Recipe[] recipes){ 
     ArrayList<String> ret = new ArrayList<String>(); 
     for(int i=0;i<recipes.length;i++){ 
      ret.add(recipes[i].name); 
     } 
     return ret; 
    } 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState);  

     setContentView(R.layout.main); 
     mTextView_recipe = (TextView)findViewById(R.id.recipeText); 
     mTextView_recipeTitle = (TextView)findViewById(R.id.recipeTitle); 

     ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, FetchRecipesRawArray(mRecipesArray)); 
     setListAdapter(adapter); 
    } 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id){ 

     mTextView_recipeTitle.setText(mRecipesArray[position].name); 

     mTextView_recipe.setText(""); 

     String[] recipeSteps = mRecipesArray[position].steps; 
     for(int i=0;i<recipeSteps.length;i++){ 
      mTextView_recipe.append(recipeSteps[i]+"\n"); 
     } 

    } 
} 

ファイル:main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical" > 

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="200dp" 
     android:background="#400000FF" 

     /> 

    <TextView 
     android:id="@+id/recipeTitle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:background="#4000FF00" 
     /> 

    <TextView 
     android:id="@+id/recipeText" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
     android:background="#40FF0000" 
     /> 

</LinearLayout> 
+0

それはsetListAdapter(アダプタ)、これはあるかもしれない理由を任意のアイデアを好きではありませんか? –

+0

コードをそのままコピーしましたか?それは私のHTC Desireデバイスでうまくコンパイルされました(あなたのAndroidManifest.xmlであなたのすべての活動を宣言してください)。注:私はまたあなたが最初に想像しているように、リストが上にある代わりのコードベースと、下のテキストビューを提供します...下の私の最初の答えを見てください。 – epichorns

+0

ちょうどそれをテストしますが、私はListActivityを拡張しなかったためにエラーが起こったと思います。愚かな私。それがどのようになったのかを教えてくれるでしょう:) –

0

あなたは(tw.appendを使用したいと思うでしょう)の代わりのsetTextの、そうでない場合はあなたが表示されますすべては、配列の最後の文字列です。

ダイナミックにするには、古いアンドロイド版の場合はAndroid Support Libraryを使用します。モデルを作成するには、各配列を読み込み、起動する前にフラグメントとしてバンドルとして文字列配列を添付します。

フラグメントぇ:http://developer.android.com/guide/topics/fundamentals/fragments.html
サポートライブラリ:実際にあなたのListActivity年代ListViewを使用する方が簡単かもしれませんhttp://developer.android.com/training/basics/fragments/support-lib.html

関連する問題