我有一项任务是在Android
制作一个简单的餐厅菜单应用程序。因此,主页包含Food
按钮和Drink
按钮。如果单击Food
按钮,将显示食物菜单页面。如果点击Drink
按钮,则会显示饮品菜单页。
MainActivity.java
:
int x = 1;
public int value()
{
x = 1;
return x;
}
public void clickFood(View view)
{
value();
Intent intent = new Intent(MainActivity.this, MenuList.class);
startActivity(intent);
}
public int value2()
{
x = 2;
return x;
}
public void clickDrink(View view)
{
value2();
Intent intent = new Intent(MainActivity.this, MenuList.class);
startActivity(intent);
}
MenuList.java
:
mainListView = (ListView) findViewById(R.id.mainListView );
int y = 1;
if(main.x == y)
{
// List of food
fooddrink = new String[]{"Fried Chicken", "Fried Rice"};
}
else
{
// List of drink
fooddrink = new String[]{"Ice Tea", "Ice Coffee"};
}
ArrayList<String> listFoodDrink = new ArrayList<String>();
listFoodDrink.addAll( Arrays.asList(fooddrink) );
listAdapter = new ArrayAdapter<String>(this, R.layout.menu_list_row, listFoodDrink);
mainListView.setAdapter( listAdapter );
问题是,ListView
的输出始终显示食物菜单,尽管我点击了Drink
按钮。我发现这是因为x
中的MainActivity.java
值并未返回值,因此int x
值始终为=。
我怎么做错了?
答案 0 :(得分:1)
你有两个活动MainActivity和MenuListActivity.In MainActivity有两个按钮Food和Restaurant。您可以按如下方式处理每个事件的点击事件:
foodButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MenuList.class);
intent.putExtra("type",1);//pass 1 for food
startActivity(intent);
}
});
restaurantButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, MenuList.class);
intent.putExtra("type",2);//pass 2 for Restaurant
startActivity(intent);
}
});
现在,在您的MenuList活动中,您必须获取键“type”的值,并根据类型值将适当的数据源传递给适配器。您可以执行以下操作(在MenuList活动的onCreate中):
int type=getActivity().getIntent().getExtras().getInt("type");
i(type==1)
{
// List of food
fooddrink = new String[]{"Fried Chicken", "Fried Rice"};
}
else
{
// List of drink
fooddrink = new String[]{"Ice Tea", "Ice Coffee"};
}
ArrayList<String> listFoodDrink = new ArrayList<String>();
listFoodDrink.addAll( Arrays.asList(fooddrink) );
listAdapter = new ArrayAdapter<String>(this, R.layout.menu_list_row, listFoodDrink);
mainListView.setAdapter( listAdapter );
答案 1 :(得分:1)
这是你的问题:
MainActivity main = new MainActivity();
您创建MainActivity
的新实例(不是您来自“来自”的实例),其中x = 1
。
在x
中设置MainActivity
,例如 static ,如
static int x = 1;
并在MenuList.java
中使用它,如下所示:
if(MainActivity.x == y)
{ ...
考虑到其组件lifecycle(that上的更多信息),Android
不应该如何进入。{1}}。系统销毁MainActivity
后,x
为静态,始终为= 1
,除非MainActivity
的其他实例更改了它。
因此,您可以使用多个选项,其中一个选项可以在某处存储x
值,例如在SharedPreferences
。另一个是根据@VVJ的回答在Intent's
extra内传递值。