如何在Android中显示GridLayout的上下文菜单
因此,我制作了一个类extend BaseAdaper,如下所示:如何在Android中显示GridLayout的上下文菜单,android,contextmenu,grid-layout,baseadapter,Android,Contextmenu,Grid Layout,Baseadapter,因此,我制作了一个类extend BaseAdaper,如下所示: public class ProfileTileAdapter extends BaseAdapter { private Context context; private ForwardingProfile[] profiles; public ProfileTileAdapter(Context context, ForwardingProfile[] profiles) { this.context = con
public class ProfileTileAdapter extends BaseAdapter {
private Context context;
private ForwardingProfile[] profiles;
public ProfileTileAdapter(Context context, ForwardingProfile[] profiles) {
this.context = context;
this.profiles = profiles;
}
@Override
public int getCount() {
return profiles.length;
}
@Override
public Object getItem(int position) {
return profiles[position];
}
@Override
public long getItemId(int position) {
return profiles[position].getID();
}
@Override
public View getView(int position, View convertView, ViewGroup arg2) {
ProfileTile tile = null;
if (convertView == null) {
tile = new ProfileTile(context, profiles[position]);
LayoutParams lp = new GridView.LayoutParams(
LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT);
tile.setLayoutParams(lp);
} else {
tile = (ProfileTile) convertView;
}
return tile;
}
}
在我的活动中,a有一个GridLayout,并将其适配器设置为ProfileTileAdapter的实例。在我的活动中,当用户长按其中一个视图(在本例中为ProfileTile)时,我想打开一个上下文菜单,但我不知道如何打开。我还需要找出当用户在上下文菜单中选择一个选项时,ProfileTile长按了什么。所有教程都在活动中使用静态视图进行操作,但不是这样。因此我最终找到了答案。显然,当您使用
Activity.registerForContextMenu(GridView)
将GridView注册到活动中的上下文菜单时,它会独立注册从适配器返回的每个视图。这就是活动的样子(适配器保持不变):
}
所以解决方法很简单,但有时我们会把事情复杂化。所以我最终找到了答案。显然,当您使用
Activity.registerForContextMenu(GridView)
将GridView注册到活动中的上下文菜单时,它会独立注册从适配器返回的每个视图。这就是活动的样子(适配器保持不变):
}
所以解决方法很简单,但有时我们会把事情复杂化
public class SMSForwarderActivity extends Activity {
private GridView profilesGridView;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.setContentView(R.layout.main);
setUpProfilesGrid();
}
private void setUpProfilesGrid() {
profilesGridView = (GridView) this.findViewById(R.id.profilesGrid);
this.registerForContextMenu(profilesGridView);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
AdapterContextMenuInfo aMenuInfo = (AdapterContextMenuInfo) menuInfo;
ProfileTile tile = (ProfileTile) aMenuInfo.targetView;//This is how I get a grip on the view that got long pressed.
}
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
.getMenuInfo();
ProfileTile tile = (ProfileTile) info.targetView;//Here we get a grip again of the view that opened the Context Menu
return super.onContextItemSelected(item);
}