我无法启动具有意图的类实例。
我的应用程序有一个初始屏幕,其中包含三个文本视图' Cakes,Drinks和Biscuits'。在这些文本视图上设置了一个onClick监听器,这样当用户点击“Cakes'它会转到一个蛋糕列表(巧克力,柠檬,胡萝卜),用户点击“饮料”#39;它列出了饮料(茶,咖啡,可乐),以及饼干的相同。目前,我有一个启动Cakes类的意图,并且在该类中有一个包含字符串(Chocolate,Lemon,Carrot等)的arrayList,当用户点击Drinks时,它会启动一个名为Drinks的单独类,并执行相同的操作,与饼干同上。但是,我认为更好的编码实践是只为这三个类提供一个类,并且具有该类的单独实例(使用不同的arrayLists分别列出蛋糕,饮料和饼干)。
我认为我应该制作一个'项目' class(即带有巧克力,柠檬,胡萝卜和所有饮料的arrayList,以及所有饼干),但不知道如何启动'项目的特定实例。我的意图写在mainActivity中的类。任何帮助表示赞赏!
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'当你点击“Cakes'”时会启动它,我想把它变成一个通用类,当你点击Cakes,Coffee或Biscuits时会启动它,但它会提供相关的ArrayList。注意我有一个名为' 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);
}
});
}
}
注意这是示例代码,而不是我的实际应用程序 - 我提到这个的原因是因为我将有一个非常长的列表,在我的代码当前编写的方式中,需要> 100个类如果我按照我上面的方式继续。
答案 0 :(得分:0)
您可以使用意图额外值:
最简单的方法是将类型传递给intent中的活动。
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));
}
试试这个并告诉我。如果问题仍然存在