簡體   English   中英

在開關盒中使用字符串作為菜單?

[英]Using strings in a switch case for a menu?

我正在為一個論壇制作一個應用程序,我正在添加一個收藏夾部分,您可以在其中添加您喜歡的部分以便快速訪問。 我有一個菜單設置,其中包含不同部分的列表,所以我所做的是制作一個開關盒來決定在按下某個菜單項時要做什么,在本例中是該部分。 通過這樣做,我了解到你不能使用帶有開關盒的琴弦,所以我的問題是我怎么能解除按下哪個按鈕並根據按下哪個按鈕進行動作?

這是我的菜單代碼:

public class Menu extends ListActivity{

String[] classes = {"Home", "Gaming", "Microsoft Consoles", 
        "Sony Consoles", "Other Platforms", "Tech Center", "General"};

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);
    setListAdapter(new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, classes));
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    // TODO Auto-generated method stub
    super.onListItemClick(l, v, position, id);
    switch (classes) {
    case "Home":

    break; 
    case "Gaming".hashCode(): 

    break; 
    }   
}
}

我得到一個錯誤,因為類是一個String [],我不能用switch開關案例,所以有沒有辦法做到這一點,或者另類?

在Java 7中添加了switch語句中的字符串。例如,請看這里 由於Android開發目前不基於Java 7語法,因此您必須采用備用路由。 這意味着:if-else語句。 他們不是最漂亮的,但他們會完成工作。

這是一個很好的,干凈的解決方法:

public enum Classes {
    HOME("Home"),
    GAMING("Gaming"),
    ...
    MICROSOFT_CONSOLES("Microsoft Consoles");

    private final String name;

    Classes(String name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return name;
    }
}

您可以切換枚舉並在適配器中以這種方式使用它:

new ArrayAdapter<String>(Menu.this, android.R.layout.simple_list_item_1, Classes.values())

更新

唯一的問題是這些字符串是硬編碼的。 為了解決這個問題,我建議實現一個靜態的Application上下文幫助器並像這樣實現enum (這是一個想法,我沒試過,但它應該工作):

public enum Classes {
    HOME(R.string.home),
    GAMING(R.string.gaming),
    ...
    MICROSOFT_CONSOLES(R.string.microsoft_consoles);

    private final int name;

    Classes(int name) {
        this.name = name;
    }

    @Override
    public String toString() {
        return App.getContext().getString(name);
    }
}

更好的方案:

一個枚舉類:

public enum Tabs 
{
 Home, 
 Gaming, 
 Microsoft_Consoles, 
 Sony_Consoles, 
 Other_Platforms, 
 Tech_Center, 
 General
}

在另一個班級:

 switch (classes)
 {
   case Home:

   break;
 ...
 }

@override枚舉選項卡的toString()類做得很好。

暫無
暫無

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

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