簡體   English   中英

從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 );

問題是,盡管單擊了“ Drink按鈕,但ListView的輸出始終顯示食物菜單 我發現這是因為MainActivity.java中的x值未返回該值,所以int x值始終為1。

我怎么做錯了?

您有兩個活動MainActivity和MenuListActivity.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活動中,您必須獲取鍵“類型”的值,並根據類型值將適當的數據源傳遞給適配器。您可以執行以下操作(在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 );

這是你的問題:

MainActivity main = new MainActivity();

您創建一個新的MainActivity實例(而不是“來自”實例),其中x = 1

MainActivity中將x設為例如靜態

static int x = 1;

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

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

但!

這不是你應該怎么走在Android考慮到其組件的生命周期 (更多的 )。 一旦MainActivity被系統銷毀, x就是靜態的,始終= 1 ,除非MainActivity另一個實例對其進行了更改。

因此,您可以使用多個選項,其中之一是將x值存儲在某個位置,例如在SharedPreferences 另一個方法是按照@VVJ的回答在Intent's 額外值內傳遞值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM