从Java中的方法返回int值

时间:2015-10-17 11:47:09

标签: 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);
}

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值始终为=。

我怎么做错了?

2 个答案:

答案 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)
{ ...

但是!

考虑到其组件lifecyclethat上的更多信息),Android不应该如何进入。{1}}。系统销毁MainActivity后,x为静态,始终为= 1,除非MainActivity的其他实例更改了它。

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