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 中。