长按GridView

时间:2014-02-14 10:49:47

标签: android gridview long-click

让我的问题清楚 - 我的GridView嵌套在ListView项目中,我想要做的就是为ListView项目拖放'n'。

我想:   - 当我点击GridView项目时,启动另一个Activity - 工作正常   - 开始拖动ListView项目,当我执行长按ListView项目 - 工作不太好

但是只有当我长时间点击GridView项目而不是GridView项目之间时才开始拖动。假设我可以在网格行中包含最多4个项目。网格包含5个项目,因此它有2行。第1个已满,第2个只有一个项目和空白(未使用)空间。当我想通过长按这个空白空间来拖动时,它不起作用。有什么建议吗?

1 个答案:

答案 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()

中的选定单元格