2017-09-26 19 views
0

インテントを持つクラスのインスタンスを起動するときに問題があります。インテントを持つクラスの特定のインスタンスを起動するにはどうすればよいですか?

私のアプリには、「ケーキ、ドリンク、ビスケット」というテキストビューの3つの初期画面があります。ユーザーが「ケーキ」をクリックするとケーキ(チョコレート、レモン、ニンジン)のリストに行き、ユーザーが「ドリンク」をクリックするとドリンクのリストに移動するように、これらのテキストビューにonClickリスナーが設定されます紅茶、コーヒー、コークス)、ビスケットの場合も同じです。現在、私はCakesクラスを起動する意図があり、そのクラス内に文字列(Chocolate、Lemon、Carrotなど)を持つarrayListがあり、ユーザーがDrinksをクリックすると、Drinksという別のクラスが起動され、 、ビスケットと同上。しかし、私は、これらの3つのクラスを1つだけ持ち、そのクラスのインスタンスを別々に持つ方がよい(ケーキ、飲み物、ビスケットを別々にリストするために異なる配列リストを使用する方がよい)。

私は「items」クラス(つまり、チョコレート、レモン、キャロット、すべてのドリンク、すべてのビスケットを持つarrayList)を作成する必要がありますが、私の意図がmainActivityに書かれたクラス。どんな助けにも感謝!

最初の3つの項目が列挙されているmainActivity.java:

package com.example.android.recipe; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 

public class MainActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

    TextView history = (TextView) findViewById(R.id.cakes); 
    history.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent cakesList = new Intent(MainActivity.this, cakeActivity.class); 
      startActivity(cakesList); 
     } 
    }); 

    TextView examination = (TextView) findViewById(R.id.drinks); 
    examination.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent drinksIntent = new Intent(MainActivity.this, drinksActivity.class); 
      startActivity(drinksIntent); 
     } 
    }); 

    TextView other = (TextView) findViewById(R.id.biscuits); 
    other.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      Intent biscuitsIntent = new Intent(MainActivity.this, BiscuitsActivity.class); 
      startActivity(biscuitsIntent); 
     } 
    }); 

    } 
} 

これは、あなたが「ケーキ」をクリックしたときに、私はにこれを有効にしたいと思い立ち上げます「CakeActivity.java」ですケーキ、コーヒー、またはビスケットをクリックすると起動されるジェネリッククラスですが、関連するArrayListが表示されます。 NB私はさらに、このアプリを開発するときにチョコレート、レモンなどをクリックすると、そのケーキを作るために必要な別々の成分のリストを持つため、 'Record'というカスタムArrayAdapterがあります。 )。

package com.example.android.recipe; 

import android.content.Intent; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 

import java.util.ArrayList; 

public class cakeActivity extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.record_list); 

     final ArrayList<Record> records = new ArrayList<Record>(); 

     records.add(new Record("Chocolate", ChocolateCake.class)); 
     records.add(new Record("Lemon", LemonCake.class)); 
     records.add(new Record("Ginger", GingerCake.class)); 

     RecordAdapter adapter = 
       new RecordAdapter(this, records, R.color.colorTan); 
     ListView listView = (ListView) findViewById(R.id.list); 
     listView.setAdapter(adapter); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Record record = records.get(position); 
       Intent intent = new Intent(getApplicationContext(), record.getListedItemId()); 
       startActivity(intent); 
      } 
      }); 



    } 
} 

NB、これは典型的なコードではなく、私の実際のアプリです - 私は私のコードは、現在書かれている方法で、必要になる、ということは本当に長いリストを持っているつもりですので、私はこれを言及する理由は、私が上の方法で続けるならば> 100クラス。

+0

インテントを使用して、次のアクティビティにデータを渡します([この投稿](https://stackoverflow.com/questions/2091465/how-do-i-pass-data-betweenを参照)。アンドロイドアプリケーションでの活動)。 – 0X0nosugar

答えて

0

Yyouは意図余分な値を使用することができます。これを行うには

最も簡単な方法は、目的の活動に型を渡すことであろう。

Intent intent = new Intent(getBaseContext(), AllInOneActivity.class); 
intent.putExtra("type", "cake"); 
startActivity(intent); 

意図

String type = getIntent().getStringExtra("type"); 

次のアクティビティには、種類に応じてデータをロードしていることへのアクセス:

final ArrayList<Record> records = new ArrayList<Record>(); 
if(type.equals("cake")) 
{ 
     records.add(new Record("Chocolate", ChocolateCake.class)); 
     records.add(new Record("Lemon", LemonCake.class)); 
     records.add(new Record("Ginger", GingerCake.class)); 
} 
else if(type.equals("Drinks")) 
{ 
records.add(new Record("fruty", whatever.class)); 
} 

これを試してみて、私に知らせてください。問題が続く場合。

+0

すばらしい、ありがとうございました。 –

関連する問題