java - 从Java中的方法返回int值

标签 java android return-value setter instance-variables

我的任务是在 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);
}

菜单列表.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 值没有返回值,所以 int x 值总是 = 1.

我哪里做错了?

最佳答案

这是你的问题:

MainActivity main = new MainActivity();

您创建了一个 MainActivity 的新实例(不是您“来自”的实例),其中 x = 1

MainActivity中制作x,例如,static like

static int x = 1;

并在 MenuList.java 中使用它,如下所示:

if(MainActivity.x == y)
{ ...

但是!

考虑到其组件的 lifecycle,这不是您在 Android 中应该采用的方式(更多关于 that )。一旦 MainActivity 被系统销毁,作为静态的 x 总是 = 1,除非 MainActivity< 的另一个实例 已经改变了它。

因此,您可以使用多个选项,其中之一是将 x 值存储在某处,例如在 SharedPreferences .另一种方法是在 Intent 的 extra 中传递值根据@VVJ 的回答。

关于java - 从Java中的方法返回int值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33186241/

相关文章:

java - Tomcat 无法识别 Linux 中的上下文文件

C++ |如何在每次不返回值的情况下循环 If 语句

mysql - 强制 MySQL 返回 IN 中所有选项的结果

java - 在 spring mvc 中获取 java.lang.NullPointerException

java - JSONProvider 返回空对象,例如 String

android - 当图像接近边缘时,9 补丁阴影消失

android - 如果应用程序进入后台然后进入前台,Robospice 请求永远不会结束?

android - Kotlin 迁移后 Crashlytics 报告错误的行号

C++错误: passing ‘const umap_int {aka const std::unordered_map<int, int>}’ as ‘this’ argument discards qualifiers [-fpermissive]

java - 如何从代表绝对或相对路径的字符串创建文件?