2013-01-06 41 views
-1

我有一个活动,显示“主菜单”项目的列表。每个列表项目单击时应该开始一个新的活动。我通过使用它的类名称加载适当的活动来完成此操作。如何实现“主菜单”ListView?

代码:

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

试试这个:

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

或者,你可以做一个menuClassNamesClass[],然后你就不需要去通过名称加载类的额外步骤。

+0

这真是棒极了!非常感谢!一直在窃听我的地狱! –

+0

有人可以向我解释为什么这是一个坏问题?即时通讯禁止张贴和IM不知道为什么2负面的帖子?我在这里错过了一些规则吗? –

0

使用2阵列,一个用于类和另一个用于要显示的名称。