4

私はを使用していExpandableListView lvます。これは私が持っているものです。

ExpandableListView lv=(ExpandableListView )findViewById(....);
lv.setOnChildClickListener(new ExpandableListView.OnChildClickListener(){
@Override
    public boolean onChildClick(ExpandableListView parent, View v,int gp, int cp, long id) {

        Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_SHORT).show();
        //perform action    
        return true;
    }
});

lv.setOnCreateContextMenuListener(new OnCreateContextMenuListener() {
    @Override
    public void onCreateContextMenu(ContextMenu contextMenu, View v,ContextMenuInfo menuInfo) {     
        ExpandableListContextMenuInfo info = (ExpandableListContextMenuInfo) menuInfo;
        customMenu.show(v);
        //do other stuff
        contextMenu=null;
    }
});

子アイテムを長押しするcustomMenu.show(v)とが呼び出され、指を離すとOnClickListenerが呼び出されます。同様に、グループアイテムを長押ししてから指を離すと、そのアイテムContextmenuListenerが呼び出され、グループが展開されて子アイテムが表示されます。これは正常な動作ですか?これを防ぐにはどうすればよいですか?

私は実際にlong Clickリストアイテムに何かをしたいです。trueオンに戻るとlongClickListener正しく機能します(クリックイベントが発生します)。ただし、アイテムのID、グループ、および子の位置も取得する必要があります。これはContextMenuInfocontextmenuリスナーでのみ提供されます。

4

2 に答える 2

6

確認しておいて

@Override
    public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {

        return true; //<-- this should be TRUE, not FALSE   
    }

を返してtrueいます。戻るfalseと、へのメソッド呼び出しが続行されるようonClick()です。

この解決策は、少なくとも私にとってはうまくいきました。return falseEclipseでコードを自動生成したときのデフォルトでしたが、変更するつもりはありませんでした。

于 2015-03-27T23:34:29.037 に答える
-1

次のようなグローバルブール値を設定します

boolean isLongClick = false;

public void onClick(View arg0) {

    if(isLongClick == false){ // this checks to see if it was long clicked
        // Perform your action here
    }
    isLongClick = false; // resetting longClick to false after bypassing action
}

public boolean onLongClick(View arg0) {
    isLongClick = true; 
    //perform other action here
    return false;
}

これは、クリック用とロングクリック用の2つのアクションリスナーを実行します。ユーザーがオブジェクトをロングクリックすると、ブール値がtrueに設定され、onClickListenerでのアクションの実行がブロックされますが、onClickListenerは何があっても起動するため、そのメソッドでブール値をリセットするようにしてください。長押しした後、アイテムは再び1回押すことができます。

これを黙って許可すると、押されたアイテムのIDなどを取得する必要があることを意味します。しかし、この方法は魅力のように機能します。ポップアップメニューのアプリに実装しました。ユーザーがアンカーを1回押すか長押しするかに応じて、2つの異なるメニューをポップアップ表示したかったのです。したがって、すばやく押すと(で開く)メニューがポップアップし、長く押すと(共有、編集、削除)などのメニューがポップアップします。

于 2014-01-01T00:05:23.857 に答える