Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/180.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:如何使用ContextMenu制作一个可点击的列表视图?_Java_Android_Listview_Contextmenu - Fatal编程技术网

Java Android:如何使用ContextMenu制作一个可点击的列表视图?

Java Android:如何使用ContextMenu制作一个可点击的列表视图?,java,android,listview,contextmenu,Java,Android,Listview,Contextmenu,我有一个可单击的列表视图,并尝试为项目创建上下文菜单,但如果我第一次长时间单击,它会激活onListItemClick方法。下次它工作的时候。 如果我用openContextMenu激活上下文菜单,它会抛出一个stackoverflowerrror 我解决了我的问题!请参阅本帖末尾 我的活动: @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layo

我有一个可单击的
列表视图
,并尝试为项目创建上下文菜单,但如果我第一次长时间单击,它会激活
onListItemClick
方法。下次它工作的时候。 如果我用
openContextMenu
激活上下文菜单,它会抛出一个
stackoverflowerrror

我解决了我的问题!请参阅本帖末尾

我的活动:

@Override
public void onCreate(Bundle icicle) {

    super.onCreate(icicle);
    setContentView(R.layout.search);

    getWords(getIntent());      
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id); 
        String lemma = (item.get(position));

        Intent intent = new Intent(this, EntryActivity.class)
            .putExtra(CL.DOC, doc)
            .putExtra(CL.ENTRY, lemma);
    startActivity(intent);
}

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle("Eintrag");
    getMenuInflater().inflate(R.menu.context, menu);
}

public boolean onContextItemSelected(MenuItem item) {
    //TODO: switch
    return super.onContextItemSelected(item);
}

private void getWords(Intent intent) {
    doc = (CLDocument)intent.getSerializableExtra(CL.DOC);
    item = doc.getEntries();

    ArrayAdapter<String> fileList = 
        new ArrayAdapter<String>(this, R.layout.row, item);
    setListAdapter(fileList);   

    getListView().setOnItemLongClickListener(new OnItemLongClickListener() {    
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
            registerForContextMenu(view);
            //openContextMenu(view);        
            return false;
        }
    });
}
我更改了方法
getWords
onCreateContextMenu
,现在它可以工作了:

private void getWords(Intent intent) {
    doc = (CLDocument)intent.getSerializableExtra(CL.DOC);
    item = doc.getEntries();

    ArrayAdapter<String> fileList = 
            new ArrayAdapter<String>(this, R.layout.row, item);
    setListAdapter(fileList);   

    registerForContextMenu(getListView());

//      getListView().setOnItemLongClickListener(new OnItemLongClickListener() {    
//          @Override
//          public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
//              registerForContextMenu(view);
//                      
//              return false;
//          }
//      });


}

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    AdapterView.AdapterContextMenuInfo info = 
            (AdapterView.AdapterContextMenuInfo)menuInfo;
    menu.setHeaderTitle(item.get(info.position));
    getMenuInflater().inflate(R.menu.context, menu);

}
private void getWords(意图){
doc=(CLDocument)intent.getSerializableExtra(CL.doc);
item=doc.getEntries();
ArrayAdapter文件列表=
新阵列适配器(此,R.layout.row,项目);
setListAdapter(文件列表);
registerForContextMenu(getListView());
//getListView().setOnItemLongClickListener(新的OnItemLongClickListener(){
//@覆盖
//公共布尔值长单击(AdapterView父项、视图、整型位置、长id){
//registerForContextMenu(视图);
//                      
//返回false;
//          }
//      });
}
public void onCreateContextMenu(ContextMenu菜单、视图v、ContextMenuInfo菜单信息){
super.onCreateContextMenu(menu,v,menuInfo);
AdapterView.AdapterContextMenuInfo信息=
(AdapterView.AdapterContextMenuInfo)menuInfo;
menu.setHeaderTitle(item.get(info.position));
getMenuInflater().充气(R.menu.context,menu);
}

所以感谢所有帮助我的人

您必须在活动的
onCreate()
回调中使用
ListView
作为参数调用
registerForContextMenu

此处:
getListView().setOnItemLongClickListener(…)
长时间单击后,注册上下文菜单(
registerForContextMenu(view)
),因此,它只会在下一次起作用。但是,如果您希望上下文菜单从一开始就工作,您应该更早地调用它,例如在调用
registerForContextMenu(getListView())
方法之前。

什么是项???请把你的日志贴出来我指的是清单上的项目。
04-17 11:31:06.103: D/dalvikvm(279): GC_FOR_MALLOC freed 5691 objects / 348744 bytes in 65ms
04-17 11:31:08.553: I/dalvikvm(279): threadid=1: stack overflow on call to Landroid/widget/AbsListView;.showContextMenuForChild:ZL
04-17 11:31:08.553: I/dalvikvm(279):   method requires 36+20+24=80 bytes, fp is 0x42089340 (64 left)
04-17 11:31:08.564: I/dalvikvm(279):   expanding stack end (0x42089300 to 0x42089000)
04-17 11:31:08.564: I/dalvikvm(279): Shrank stack (to 0x42089300, curFrame is 0x4208beb8)
04-17 11:31:08.573: D/AndroidRuntime(279): Shutting down VM
04-17 11:31:08.573: W/dalvikvm(279): threadid=1: thread exiting with uncaught exception (group=0x4001d800)
04-17 11:31:08.703: D/dalvikvm(279): GC_FOR_MALLOC freed 7370 objects / 493888 bytes in 50ms
04-17 11:31:08.733: E/AndroidRuntime(279): FATAL EXCEPTION: main
04-17 11:31:08.733: E/AndroidRuntime(279): java.lang.StackOverflowError
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showContextMenuForChild(AbsListView.java:1779)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.view.View.showContextMenu(View.java:2444)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.app.Activity.openContextMenu(Activity.java:2390)
04-17 11:31:08.733: E/AndroidRuntime(279):  at de.solich.cldic.SearchActivity$1.onItemLongClick(SearchActivity.java:99)
04-17 11:31:08.733: E/AndroidRuntime(279):  at android.widget.AbsListView.showC
04-17 11:31:08.823: D/dalvikvm(279): GC_FOR_MALLOC freed 3648 objects / 486736 bytes in 50ms
private void getWords(Intent intent) {
    doc = (CLDocument)intent.getSerializableExtra(CL.DOC);
    item = doc.getEntries();

    ArrayAdapter<String> fileList = 
            new ArrayAdapter<String>(this, R.layout.row, item);
    setListAdapter(fileList);   

    registerForContextMenu(getListView());

//      getListView().setOnItemLongClickListener(new OnItemLongClickListener() {    
//          @Override
//          public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {
//              registerForContextMenu(view);
//                      
//              return false;
//          }
//      });


}

public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    AdapterView.AdapterContextMenuInfo info = 
            (AdapterView.AdapterContextMenuInfo)menuInfo;
    menu.setHeaderTitle(item.get(info.position));
    getMenuInflater().inflate(R.menu.context, menu);

}