如何用意图启动某个类的特定实例?
我无法启动一个有意图的类的实例。如何用意图启动某个类的特定实例?
我的应用程序有一个初始屏幕,包含三个文字浏览“蛋糕,饮料和饼干”。在这些文字浏览中设置了onClick监听器,以便当用户点击“蛋糕”时,它会进入蛋糕列表(巧克力,柠檬,胡萝卜),并且用户点击“饮料”它将进入饮料列表(茶,咖啡,可乐)和饼干相同。目前,我的意图是启动一个Cakes类,并且在该类中有一个包含字符串(巧克力,柠檬,胡萝卜等)的arrayList,当用户点击Drinks时,它会启动一个名为Drinks的单独的类并执行相同的操作,与饼干同样。然而,我认为对于这三个类别只有一个类别,并且具有该类别的单独实例(使用不同的arrayLists来单独列出蛋糕,饮料和饼干)是更好的编码实践。我想我应该做一个'物品'类(即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”当你点击“蛋糕”,这被推出,我想变成一个泛型类,当你点击蛋糕,咖啡或饼干时,它会启动,但它提供了相关的ArrayList。 NB我有一个名为'Record'的自定义ArrayAdapter,因为当我进一步开发这个应用程序时,点击巧克力,柠檬等将会有一个单独的配料列表来制作这个Cake(这些也将在未来不会是单独的类)。
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个班级。
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));
}
试试这个,让我知道。如果问题持续存在。
令人惊叹的是,非常感谢您的帮助。 –
使用Intent将数据(例如哪种类型的List)传递给下一个Activity,请参见[this post](https://*.com/questions/2091465/how-do-i-pass-data-between - 活动功能于Android的应用程序)。 – 0X0nosugar