0

저는 안드로이드에서 초보자이고 컨텍스트 메뉴에 대해 배우고 있지만, 컨텍스트 메뉴에 대해 서핑을 한 후에는 Adapter와 Inflater에서 조금 혼란스러워합니다. 나는 Inflater를 사용하여 1 개의 프로그램과 1 개의 프로그램을 보았다. 그래서, 어떻게 도와주세요/어댑터와 Inflater를 언제 사용하십시오.어댑터 사용시기와 인플레이터 사용시기

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

이러한 유형의 다른 용도로 사용

여기서 어댑터를 사용

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

다른 예 ... 인플레이터를 사용한 예이다.

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

+0

@makjal [XML 리소스 파일 사용] (http://stackoverflow.com/a/11960645/687315) 자바 코드로 객체를 직접 생성하는 대신 첫 번째 예제와 같은 레이아웃을 사용합니다. – user113215