2012-05-03 3 views
3

나는 두 개의보기가있는 ViewPagerActivity입니다. 각보기마다 다른 컨텍스트 메뉴를 등록하려고합니다. 나는 몇 가지를 시도했지만 (registerForContextMenu()) 항상 두 번째보기처럼 행동하는 두 가지보기로 끝났다. 어떤 아이디어?각보기마다 다른 ContextMenu가있는 ViewPager

public class ViewPagerActivity extends UomeActivity { 

    private ViewPager viewPager;   
    private ViewPagerAdapter viewPagerAdapter; 
    private ListAdapter adapter; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_pager); 

     refreshAdapter(); 
    } 

    private class ViewPagerAdapter extends PagerAdapter { 

     private final List<Transaction> accountTransactions; 
     private final List<User> accountUsers; 

     public ViewPagerAdapter() { 
      // initialize lists 
     } 

     @Override 
     public Object instantiateItem(View collection, int viewPosition) { 
      View layout; 
      ListView listView; 
      switch (viewPosition) { 
       case 0: 
        layout = LayoutInflater.from(getApplicationContext()).inflate(
          R.layout.list_account_paired_transactions, null); 

        List<PairedTransaction> pairedTransactions = getPairedTransactions(); 

        adapter = new AccountPairedTransactionItemAdapter(ViewPagerActivity.this, 
          R.layout.list_account_paired_transactions, pairedTransactions); 

        listView = (ListView) layout.findViewById(android.R.id.list); 
        listView.setOnItemClickListener(new OnItemClickListener() { 
         @Override 
         public void onItemClick(AdapterView<?> parent, View view, int position, 
           long id) { 
          // do something 
         } 
        }); 
        registerForContextMenu(listView); 
        break; 
       case 1: 
        layout = LayoutInflater.from(getApplicationContext()).inflate(
          R.layout.list_account_transactions, null); 
        initViewPagerInfo(layout, R.string.paired_transactions, 
          R.string.all_account_transactions, R.string.empty, viewPosition); 

        adapter = new TransactionItemAdapter(ViewPagerActivity.this, 
          R.layout.list_account_transactions, accountTransactions, 
          new UserDaoImpl(
            getApplicationContext())); 

        listView = (ListView) layout.findViewById(android.R.id.list); 
        registerForContextMenu(listView); 
        break; 
       default: 
        throw new IllegalArgumentException("Unsupported number of views."); 
      } 

      listView.setAdapter(adapter); 
      listView.setDivider(new ColorDrawable(R.color.list_separator)); 
      listView.setDividerHeight(1); 
      listView.setBackgroundColor(Color.WHITE); 
      listView.setCacheColorHint(Color.WHITE); 
      ((ViewPager) collection).addView(layout); 

      return layout; 
     } 

     // omitted 

    } 

    @Override 
    protected void onResume() { 
     refreshAdapter(); 
     super.onResume(); 
    } 

    private void refreshAdapter() { 
     viewPagerAdapter = new ViewPagerAdapter(); 
     viewPager = findById(R.id.view_pager); 
     viewPager.setAdapter(viewPagerAdapter); 
    } 

    @Override 
    public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) { 
     menu.add(R.string.show_info); 
    } 

    @Override 
    public boolean onContextItemSelected(MenuItem item) { 
     // TODO: toast which object has been selected 
    } 

} 

답변

2

문제는 두보기가 모두 동시에 인스턴스화 (보기 페이지 작성)된다는 것입니다. 두 번째보기에서 onRegisterForContextMenu을 설정하면 첫 번째보기에서 덮어 씁니다.

가능한 해결책은 onContextItemSelected 방법으로 어떤보기가 표시되는지 확인하는 것입니다.

+0

나는 그렇게 생각했다. 내가 가지고있는 견해를 확인하는 방법과 올바른 항목을 얻는 방법에 대한 사례가 있습니까? – user219882

+0

아마도 더 간단한 방법으로 문제를 해결할 수 있지만 앱에서이 방법을 사용했습니다. ViewPager에 소스 코드를 사용하고 현재 위치를 반환하는 메소드를 추가하여 수정했습니다. 메모리에서 다음과 같이 추가하면됩니다. public int getCurrentItem() { return mCurItem; }'. 'onContextItemSelected' 메소드에서 이것을 호출 할 수 있습니다. –

+0

나는 그것을 다르게 만들었지 만 나는 미래에 당신의 솔루션을 확실히 시험해 보았습니다. 좋은데 ... 고마워. – user219882