0

我是Android新手,我學習上下文菜單,但衝浪後關於上下文菜單我有點適應器和Inflater混淆。我看到使用適配器的1個程序和使用Inflater的1個程序。所以,請幫助我如何/何時使用適配器和Inflater。什麼時候使用適配器和什麼時候使用inflater

下面是使用吹氣一個例子...

public class MainActivity extends ListActivity { 

    private String selectedName = ""; 
    private String[] nameList; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     nameList = getResources().getStringArray(R.array.name_list); 

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

     registerForContextMenu(getListView()); 

    } 

    public void onCreateContextMenu(ContextMenu menu, View v, 
      ContextMenuInfo menuInfo) { 
     getMenuInflater().inflate(R.menu.context_menu, menu); 
    } 

    public boolean onContextItemSelected(MenuItem item) { 

     AdapterContextMenuInfo adapInfo = (AdapterContextMenuInfo) item 
       .getMenuInfo(); 
     selectedName = nameList[(int) adapInfo.id]; 

     switch (item.getItemId()) { 
     case R.id.view: 
      Toast.makeText(MainActivity.this, 
        "You have pressed View Context Menu for " + selectedName, 
        Toast.LENGTH_LONG).show(); 
      return true; 
     case R.id.save: 
      Toast.makeText(MainActivity.this, 
        "You have pressed Save Context Menu for " + selectedName, 
        Toast.LENGTH_LONG).show(); 
      return true; 
     case R.id.edit: 
      Toast.makeText(MainActivity.this, 
        "You have pressed Edit Context Menu for " + selectedName, 
        Toast.LENGTH_LONG).show(); 
      return true; 
     case R.id.delete: 
      Toast.makeText(MainActivity.this, 
        "You have pressed Delete Context Menu for " + selectedName, 
        Toast.LENGTH_LONG).show(); 
      return true; 
     } 
     return false; 
    } 
} 

使用適配器又如:

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    Countries = getResources().getStringArray(R.array.Game); 
    ListView list = (ListView) findViewById(R.id.list); 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      R.layout.listitem, Countries); 
    list.setAdapter(adapter); 
    registerForContextMenu(list); 
} 

public void onCreateContextMenu(ContextMenu menu, View v, 
     ContextMenuInfo menuInfo) { 
    if (v.getId() == R.id.list) { 
     AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo; 
     menu.setHeaderTitle(Countries[info.position]); 
     String[] menuItems = getResources().getStringArray(
       R.array.contextmenu); 
     for (int i = 0; i < menuItems.length; i++) { 
      menu.add(Menu.NONE, i, i, menuItems[i]); 
     } 
    } 
} 

public boolean onContextItemSelected(MenuItem item) { 
    // TODO Auto-generated method stub 
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item 
      .getMenuInfo(); 
    int menuItemIndex = item.getItemId(); 

    String[] menuItems = getResources().getStringArray(R.array.contextmenu); 
    String[] menuItems1 = getResources().getStringArray(R.array.game); 
    String menuItemName = menuItems[menuItemIndex]; 
    String listItemName = menuItems1[info.position]; 
    // selectedName = nameList[(int) info.id]; 

    TextView text = (TextView) findViewById(R.id.textView1); 
    text.setText(String.format("Selected %s for item %s", menuItemName, 
      listItemName)); 
    return true; 
} 

回答

0

這些類型的服務於不同的目的。

MenuInflator將XML文件轉換爲表示菜單的屏幕布局的Menu對象。在第一個示例中,R.menu.context_menu引用了位於res/menu/context_menu.xml的關聯XML文件,該文件定義了將出現在菜單中的選項。有關XML菜單資源的格式,請參見Menu Resource。這裏有一個簡單的例子:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:id="@+id/open" android:title="Open"/> 
    <item android:id="@+id/info" android:title="More Info"/> 
    <item android:id="@+id/delete" android:title="Delete"/> 
</menu> 

AdapterContextMenuInfo提供在上下文菜單中拿出來的列表,網格等,它允許您確定哪些項目中選定的用戶(長按)的額外信息。注意你的兩個例子都使用這個。

+0

。謝謝你的回覆。但我已經知道了。對此,在兩個例子oncreatecontextmenu()方法中,1使用適配器和1使用inflater。那麼,哪一個最適合使用?爲什麼?對不起,您的不便。其實我忘了添加一些代碼行,但現在我添加了.. – makjal 2013-04-14 19:23:08

+0

@makjal您應該[使用XML資源文件](http://stackoverflow.com/a/11960645/687315)像第一個例子那樣佈局,而不是直接用Java代碼生成對象。 – user113215 2013-04-14 19:32:07

相關問題