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
}
}
나는 그렇게 생각했다. 내가 가지고있는 견해를 확인하는 방법과 올바른 항목을 얻는 방법에 대한 사례가 있습니까? – user219882
아마도 더 간단한 방법으로 문제를 해결할 수 있지만 앱에서이 방법을 사용했습니다. ViewPager에 소스 코드를 사용하고 현재 위치를 반환하는 메소드를 추가하여 수정했습니다. 메모리에서 다음과 같이 추가하면됩니다. public int getCurrentItem() { return mCurItem; }'. 'onContextItemSelected' 메소드에서 이것을 호출 할 수 있습니다. –
나는 그것을 다르게 만들었지 만 나는 미래에 당신의 솔루션을 확실히 시험해 보았습니다. 좋은데 ... 고마워. – user219882