インテントを持つクラスのインスタンスを起動するときに問題があります。インテントを持つクラスの特定のインスタンスを起動するにはどうすればよいですか?
私のアプリには、「ケーキ、ドリンク、ビスケット」というテキストビューの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クラス。
インテントを使用して、次のアクティビティにデータを渡します([この投稿](https://stackoverflow.com/questions/2091465/how-do-i-pass-data-betweenを参照)。アンドロイドアプリケーションでの活動)。 – 0X0nosugar