Android 为什么上下文菜单不是';不行吗?

Android 为什么上下文菜单不是';不行吗?,android,android-listview,contextmenu,android-contextmenu,Android,Android Listview,Contextmenu,Android Contextmenu,我有一个带有custon适配器的listview。我必须为它设置一个上下文菜单,但它不起作用。我把长按放到列表中,它也不起作用了。我不知道如何触发上下文菜单。如果我必须点击某个项目或长时间点击它。我确实注册了一次长时间的点击,以从项目中获取id 编辑我想我找到了问题所在。我的项目列表视图上有一个按钮。我从布局中删除了这个按钮,关联菜单工作正常。但我需要这个按钮。为什么按钮会导致关联菜单出现问题 这是一节课: public class HistoricoDespesasActivity exten

我有一个带有custon适配器的listview。我必须为它设置一个上下文菜单,但它不起作用。我把
长按
放到列表中,它也不起作用了。我不知道如何触发
上下文菜单
。如果我必须点击某个项目或长时间点击它。我确实注册了一次长时间的点击,以从项目中获取id


编辑我想我找到了问题所在。我的项目列表视图上有一个按钮。我从布局中删除了这个按钮,关联菜单工作正常。但我需要这个按钮。为什么按钮会导致关联菜单出现问题

这是一节课:

public class HistoricoDespesasActivity extends Activity {

Helper h;
AlphaAnimation buttonClick; 
DespesasDAO dDAO;
ListView lv;
DespesaHistoricoAdapter adapter;
int idDespesasSelecionada;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_historico_despesas);

    lv = (ListView)findViewById(R.id.lvHistoricoDespesas);  

    TextView tvMarcaModelo = (TextView)findViewById(R.id.tvMarcaModeloCabecalho);
    TextView tvApelido = (TextView)findViewById(R.id.tvApelidoCabecalho);

    tvApelido.setVisibility(View.INVISIBLE);
    tvMarcaModelo.setVisibility(View.INVISIBLE);

    buttonClick = new AlphaAnimation(1, 0.5f);
    h = new Helper(this);
    h.mostraVeiculoAtivo();

    adapter = new DespesaHistoricoAdapter(this);

    dDAO = new DespesasDAO(this);
    dDAO.open();
    Cursor cursor = dDAO.consultarTodasDespesasByIdVeiculo(h.getId());

    int id;
    String data;
    String tipoDespesa = null;
    double valor;
    int tipo = 0;
    if(cursor != null && cursor.moveToFirst()){
        do {
            id = cursor.getInt(cursor.getColumnIndex(DespesasDAO.COLUNA_ID));
            data = cursor.getString(cursor.getColumnIndex(DespesasDAO.COLUNA_DESPESA_DATA));
            tipo = cursor.getInt(cursor.getColumnIndex(DespesasDAO.COLUNA_ITEM_ID));
            valor = cursor.getDouble(cursor.getColumnIndex(DespesasDAO.COLUNA_DESPESA_VALOR));

            if(tipo == 1){
                tipoDespesa = "Pedágio";
            } else if(tipo == 2){
                tipoDespesa = "Estacionamento";
            } else if(tipo == 3){
                tipoDespesa = "Lavagem";
            } else if(tipo == 4){
                tipoDespesa = "Diversos";
            }

            adapter.addDespesa(id, tipoDespesa, data, valor);

        } while (cursor.moveToNext());

        cursor.close();
        dDAO.close();
        lv.setAdapter(adapter);
    }
    lv.setLongClickable(true);
    lv.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View view,
                int position, long id) {

            idDespesasSelecionada = (Integer) parent.getItemAtPosition(position);
            return true;
        }
    });
    registerForContextMenu(lv);

}

@Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {     
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.setHeaderTitle("Despesas");
    menu.add(0, v.getId(), 0, "Deletar");

}

@Override
public boolean onContextItemSelected(MenuItem item) {       

    if(item.getTitle().equals("Deletar")){
        dDAO.open();
        dDAO.removerDespesasById(idDespesasSelecionada);
        dDAO.close();
    }



    onCreate(new Bundle());
    return super.onContextItemSelected(item);
}

@Override
protected void onResume() {
    onCreate(new Bundle());
    super.onResume();
}

}
公共类HistoricCodesPassaActivity扩展活动{
助手h;
字母动画按钮点击;
DespesasDAO dDAO;
ListView lv;
共适配适配器;
int IDespesasseleconada;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u historic\u despeas);
lv=(ListView)findViewById(R.id.lvHistoricCodesPersas);
TextView tVMarcadolo=(TextView)findViewById(R.id.tVMarcadolocabecalho);
TextView tvApelido=(TextView)findViewById(R.id.tvApelido);
tvApelido.setVisibility(视图.不可见);
设置可见性(视图不可见);
buttonClick=新字母动画(1,0.5f);
h=新助手(此);
h、 mostraVeiculoAtivo();
适配器=新的卸压历史共适配器(此);
dDAO=新的DespesasDAO(本);
dDAO.open();
Cursor Cursor=dDAO.consultartodasdespesasbyidveculo(h.getId());
int-id;
字符串数据;
字符串tipoDespesa=null;
双重英勇;
int tipo=0;
if(cursor!=null&&cursor.moveToFirst()){
做{
id=cursor.getInt(cursor.getColumnIndex(DespesasDAO.COLUNA_id));
data=cursor.getString(cursor.getColumnIndex(DespesasDAO.COLUNA_DESPESA_data));
tipo=cursor.getInt(cursor.getColumnIndex(DespesasDAO.COLUNA_ITEM_ID));
valor=cursor.getDouble(cursor.getColumnIndex(DespesasDAO.COLUNA_DESPESA_valor));
如果(tipo==1){
tipoDespesa=“Pedágio”;
}否则如果(tipo==2){
tipoDespesa=“Estacionamento”;
}否则如果(tipo==3){
tipoDespesa=“Lavagem”;
}否则如果(tipo==4){
tipoDespesa=“潜水员”;
}
adapter.addespesa(id,tipoDespesa,data,valor);
}while(cursor.moveToNext());
cursor.close();
dDAO.close();
低压设置适配器(适配器);
}
lv.setLongClickable(真);
lv.setOnItemLongClickListener(新的OnItemLongClickListener(){
@凌驾
长单击(AdapterView父视图、视图、,
内部位置,长id){
IDDepseSesselecionada=(整数)parent.getItemAtPosition(位置);
返回true;
}
});
registerForContextMenu(lv);
}
@凌驾
public void onCreateContextMenu(ContextMenu,视图v,
ContextMenuInfo menuInfo){
super.onCreateContextMenu(menu,v,menuInfo);
菜单。设置标题(“Despesas”);
添加(0,v.getId(),0,“Deletar”);
}
@凌驾
公共布尔值onContextItemSelected(MenuItem项){
if(item.getTitle().equals(“Deletar”)){
dDAO.open();
dDAO.DespesasById(idDespesasSelecionada);
dDAO.close();
}
onCreate(newbundle());
返回super.onContextItemSelected(项目);
}
@凌驾
受保护的void onResume(){
onCreate(newbundle());
super.onResume();
}
}

删除列表视图的
设置OnItemLongClickListener
,并用该设置替换
onContextItemSelected

@Override
    public boolean onContextItemSelected(MenuItem item) 
    {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

        if(item.getTitle().equals("Deletar"))
        {
           dDAO.open();
           dDAO.removerDespesasById(info.position);
           dDAO.close();
        }
    return true;
    }

删除列表视图的
setOnItemLongClickListener
,并用此替换
onContextItemSelected

@Override
    public boolean onContextItemSelected(MenuItem item) 
    {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

        if(item.getTitle().equals("Deletar"))
        {
           dDAO.open();
           dDAO.removerDespesasById(info.position);
           dDAO.close();
        }
    return true;
    }

删除列表视图的
setOnItemLongClickListener
,并用此替换
onContextItemSelected

@Override
    public boolean onContextItemSelected(MenuItem item) 
    {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

        if(item.getTitle().equals("Deletar"))
        {
           dDAO.open();
           dDAO.removerDespesasById(info.position);
           dDAO.close();
        }
    return true;
    }

删除列表视图的
setOnItemLongClickListener
,并用此替换
onContextItemSelected

@Override
    public boolean onContextItemSelected(MenuItem item) 
    {
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();

        if(item.getTitle().equals("Deletar"))
        {
           dDAO.open();
           dDAO.removerDespesasById(info.position);
           dDAO.close();
        }
    return true;
    }

按如下方式更改onCreateContextMenu:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater =getMenuInflater();
    inflater.inflate(R.menu.more_tab_menu, menu);
}
请参见本主题:

编辑:
使用按钮。图像按钮和列表视图可单击。如果您使用按钮并设置android:focusableInTouchMode=“false”工作正常。

更改CreateContextMenu如下:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater =getMenuInflater();
    inflater.inflate(R.menu.more_tab_menu, menu);
}
请参见本主题:

编辑:
使用按钮。图像按钮和列表视图可单击。如果您使用按钮并设置android:focusableInTouchMode=“false”工作正常。

更改CreateContextMenu如下:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater =getMenuInflater();
    inflater.inflate(R.menu.more_tab_menu, menu);
}
请参见本主题:

编辑:
使用按钮。图像按钮和列表视图可单击。如果您使用按钮并设置android:focusableInTouchMode=“false”工作正常。

更改CreateContextMenu如下:

@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
    super.onCreateContextMenu(menu, v, menuInfo);
    MenuInflater inflater =getMenuInflater();
    inflater.inflate(R.menu.more_tab_menu, menu);
}
请参见本主题:

编辑:
使用按钮。图像按钮和列表视图可单击。如果使用按钮并设置android:focusableInTouchMode=“false”工作正常。

设置列表的长点击监听器的目的是什么。。?你能解释一下吗?这是为了打开上下文菜单,并在IDDepseSesselection中设置id。设置列表的OnItemLongClickListener的目的是什么。。?你能解释一下吗?这是为了打开上下文菜单,并在IDDepseSesselection中设置id。设置列表的OnItemLongClickListener的目的是什么。。?你能解释一下吗?这是为了打开上下文菜单,并在IDDepseSesselection中设置id。设置列表的OnItemLongClickListener的目的是什么。。?你能解释一下吗?这是为了打开上下文菜单,并在IDESPASSELECTIONADI中设置id,但菜单没有打开。我怎么打开它?单击或长时间单击?长时间单击listview项目