如何实现“主菜单”ListView?

时间:2013-01-06 05:45:39

标签: android listview android-intent listactivity listadapter

我有一个显示“主菜单”项列表的活动。每个列表项都应在单击时启动新活动。我是通过使用它的类名加载适当的活动来完成的。

代码:

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();
        }
    }

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

例如,如何让列表显示“关于我们”或“关于公司名称”,而不是显示“关于我们”?

2 个答案:

答案 0 :(得分:2)

试试这个:

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[],然后您就不需要按名称加载该课程。

答案 1 :(得分:0)

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