【问题标题】:How to implement a "main menu" ListView?如何实现“主菜单”ListView?
【发布时间】:2013-01-06 05:45:38
【问题描述】:

我有一个显示“主菜单”项目列表的活动。单击时,每个列表项都应启动一个新活动。我通过使用它的类名加载适当的活动来做到这一点。

代码:

public class MenuActivity extends ListActivity {

    String classes[] = { "AboutUsActivity", "CompanyProfileActivity", "ProductsActivity", "ContactActivity" };

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, classes));
    }

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {

        super.onListItemClick(l, v, position, id);

        String cheese = classes[position];
        try {
            Class ourClass = Class.forName("com.example.test." + cheese);
            Intent ourIntent = new Intent(this, ourClass);
            startActivity(ourIntent);
        }
        catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

因为我将类名存储在列表中,这就是向用户显示的内容,所以它对用户不是很友好。我该如何解决这个问题?

例如,我怎样才能让列表显示“关于我们”或“关于公司名称”之类的内容,而不是显示“AboutUs”?

【问题讨论】:

    标签: android listview android-intent listactivity listadapter


    【解决方案1】:

    试试这个:

    import android.app.ListActivity;
    import android.content.Intent;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.ArrayAdapter;
    import android.widget.ListView;
    
    public class MenuActivity extends ListActivity
    {
        private String[] menuItems = { "About Us", "Company Profile", "Products", "Contact" };
        private String[] menuClassNames = { AboutUsActivity.class.getName(), CompanyProfileActivity.class.getName(), ProductsActivity.class.getName(), ContactActivity.class.getName() };
    
        @Override
        protected void onCreate(Bundle savedInstanceState)
        {
            super.onCreate(savedInstanceState);
    
            setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, menuItems));
        }
    
        @Override
        protected void onListItemClick(ListView l, View v, int position, long id)
        {
            super.onListItemClick(l, v, position, id);
            try
            {
                Intent intent = new Intent(this, Class.forName(menuClassNames[position]));
                startActivity(intent);
            }
            catch (ClassNotFoundException e)
            {
                e.printStackTrace();
            }
        }
    }
    

    或者,您可以将menuClassNames 设为Class[],然后您就无需执行按名称加载类的额外步骤。

    【讨论】:

    • 这很棒!太感谢了!一直在烦我!
    • 有人可以向我解释为什么这是一个不好的问题吗???我被禁止发帖,我不确定为什么 2 个负面帖子?我在这里错过了一些规则吗???
    【解决方案2】:

    使用 2 个数组,一个用于类,另一个用于要显示的名称。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多