1

レシピへのステップを表示しようとしています。レシピは文字列配列に保存されています。

各ステップをテキストビューに挿入しようとしていますが、次のコードがあります。

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]);
    }
  }
}

私もそれを動的にしたいので、誰かが私がそれを行う方法を知っていますか?(たとえば、ユーザーがクリックしたレシピに応じて、そのレシピが表示されます)。

ありがとう

4

2 に答える 2

2

実際に自分ListActivityのレシピを使用する方が簡単かもしれません...ユーザーにとって間違いなくより直感的であるため、ListView別のレシピでレシピを表示することもできます...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>
于 2012-05-01T19:37:43.247 に答える
0

setTextの代わりにtw.append()を使用することをお勧めします。そうしないと、配列の最後の文字列だけが表示されます。

動的にするために、フラグメント(古いAndroidバージョンの場合はAndroidサポートライブラリを使用)モデルを使用し、各配列をロードし、起動する前に文字列配列をバンドルとしてフラグメントにアタッチします。

フラグメントtut:http
://developer.android.com/guide/topics/fundamentals/fragments.html サポートライブラリ:http ://developer.android.com/training/basics/fragments/support-lib.html

于 2012-05-01T18:59:37.377 に答える