让我的问题清楚 - 我的GridView嵌套在ListView项目中,我想要做的就是为ListView项目拖放'n'。
我想: - 当我点击GridView项目时,启动另一个Activity - 工作正常 - 开始拖动ListView项目,当我执行长按ListView项目 - 工作不太好
但是只有当我长时间点击GridView项目而不是GridView项目之间时才开始拖动。假设我可以在网格行中包含最多4个项目。网格包含5个项目,因此它有2行。第1个已满,第2个只有一个项目和空白(未使用)空间。当我想通过长按这个空白空间来拖动时,它不起作用。有什么建议吗?
答案 0 :(得分:0)
我知道您希望在GridView项目上显示短按和长按的不同上下文菜单。
首先,您只需设置侦听器以进行短暂点击,因为默认行为会在长时间点击时自动显示上下文菜单。
接下来,在OnItemClickListener中将布尔标志设置为true。长按一下,默认值为false。
最后,在onCreateContextMenu()中检查它是否短按并显示不同的上下文菜单(标准)并将flag设置为false。否则,让它显示默认的上下文菜单(选项)。
以下是一些展示这个想法的代码。
public class MainActivity extends Activity {
private static final String[] arr = {"A", "B", "C", "D", "E", "F", "G", "H","I"};
private GridView mTGrid;
private boolean isShort;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
mTGrid = (GridView) findViewById(R.id.gridView1);
registerForContextMenu(mTGrid);
mTGrid.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
isShort = true;
openContextMenu(view);
}
});
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.cell, arr);
mTGrid.setAdapter(adapter);
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
if(isShort) {
getMenuInflater().inflate(R.menu.context_standard, menu);
menu.setHeaderTitle("Standard Menu for "+arr[info.position]);
isShort = false;
}
else {
getMenuInflater().inflate(R.menu.context_options, menu);
menu.setHeaderTitle("Options Menu for "+arr[info.position]);
}
}
}
或者您可以完全删除 onItemLongClick 侦听器并使用以下代码获取 onContextItemSelected()
中的选定单元格