Return 来自 Java 中方法的 int 值
Return int value from method in Java
我的任务是在 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
按钮。我发现这是因为 MainActivity.java
中的 x
值不是 return 值,所以 int x
值始终 = 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 activity 中你必须获取键 "type" 的值并根据类型值将适当的数据源传递给 adapter.You 可以做这样的事情(在 onCreate 中菜单列表 activity):
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 );
这是你的问题:
MainActivity main = new MainActivity();
您创建了 MainActivity
的一个新实例(不是您 "come from" 的实例),其中 x = 1
.
在MainActivity
中制作x
,例如static like
static int x = 1;
并在MenuList.java
中使用如下:
if(MainActivity.x == y)
{ ...
但是!
考虑到组件的 lifecycle (more on that),Android
不应该这样。一旦 MainActivity
被系统销毁,作为静态的 x
将始终是 = 1
,除非 MainActivity
的另一个实例更改了它。
因此,您可以使用多种选择,其中之一是将 x
值存储在某处,例如根据@VVJ 的回答,在 SharedPreferences
. Another one would be to pass the value within Intent's
extra 中。
我的任务是在 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
按钮。我发现这是因为 MainActivity.java
中的 x
值不是 return 值,所以 int x
值始终 = 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 activity 中你必须获取键 "type" 的值并根据类型值将适当的数据源传递给 adapter.You 可以做这样的事情(在 onCreate 中菜单列表 activity):
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 );
这是你的问题:
MainActivity main = new MainActivity();
您创建了 MainActivity
的一个新实例(不是您 "come from" 的实例),其中 x = 1
.
在MainActivity
中制作x
,例如static like
static int x = 1;
并在MenuList.java
中使用如下:
if(MainActivity.x == y)
{ ...
但是!
考虑到组件的 lifecycle (more on that),Android
不应该这样。一旦 MainActivity
被系统销毁,作为静态的 x
将始终是 = 1
,除非 MainActivity
的另一个实例更改了它。
因此,您可以使用多种选择,其中之一是将 x
值存储在某处,例如根据@VVJ 的回答,在 SharedPreferences
. Another one would be to pass the value within Intent's
extra 中。