0

Custon アダプターを使用したリストビューがあります。コンテキスト メニューを処理する longclick のリスナーを実装しました。問題は、長いクリックが機能しないことです。コンテキストメニューが表示されません。

コードは次のとおりです。

リストビューからのリスナー

    registerForContextMenu(lv);

    lv.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {              
            seguro = (SeguroSelecaoModel)adapter.getItem(position);
            return false;
        }
    }); 

カスタム アダプターからのコード

    public View getView(final int index, View view, ViewGroup parent) {
    if(view == null){
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        view = inflater.inflate(R.layout.linha_selecionar_seguro, parent, false);                   
    }

    final SeguroSelecaoModel seguro = (SeguroSelecaoModel)getItem(index);

    view.setLongClickable(true);

    TextView tvNome = (TextView) view.findViewById(R.id.tvNomeSeguro);
    tvNome.setText(seguro.getNomeSeguradora());

    TextView tvData = (TextView) view.findViewById(R.id.tvDataValidadeSelecionarSeguro);
    tvData.setText(seguro.getDataValidade());

    ImageView ivCell = (ImageView) view.findViewById(R.id.ivCellSelecionarSeguro);      
    Button btEdicao = (Button) view.findViewById(R.id.btEditarSeguro);      

    TextView labelSeguro = (TextView) view.findViewById(R.id.labelSeguroSelecionarSeguro);
    TextView labelValidade = (TextView) view.findViewById(R.id.labelValidadeSelecionarSeguro);

    if(seguro.isAtivo() == true){
        ivCell.setBackgroundResource(R.drawable.cellselectedbackground);
        tvNome.setTextColor(view.getResources().getColor(R.color.amarelo));
        tvData.setTextColor(view.getResources().getColor(R.color.amarelo));
        btEdicao.setBackgroundResource(R.drawable.goldbuttonarrow);
        labelSeguro.setTextColor(view.getResources().getColor(R.color.vermelho));
        labelValidade.setTextColor(view.getResources().getColor(R.color.vermelho));
    } else{
        ivCell.setBackgroundResource(R.drawable.cellbg);
        tvNome.setTextColor(Color.WHITE);
        tvData.setTextColor(Color.WHITE);
        btEdicao.setBackgroundResource(R.drawable.bt_seta);
        labelSeguro.setTextColor(view.getResources().getColor(R.color.cinza));
        labelValidade.setTextColor(view.getResources().getColor(R.color.cinza));
    }

    btEdicao.setOnClickListener(new OnClickListener() {         
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(context, DadosSeguro1Activity.class);
            intent.putExtra("idSeguro", seguro.getId());
            context.startActivity(intent);       
            //((Activity) context).finish();                
        }
    });

    return view;
}

コンテキスト メニューからのコード

 @Override
public void onCreateContextMenu(ContextMenu menu, View v,
        ContextMenuInfo menuInfo) {     
    super.onCreateContextMenu(menu, v, menuInfo);

    menu.setHeaderTitle(seguro.getNomeSeguradora());
    menu.add("Selecionar Seguro");
    menu.add("Excluir Seguro"); 

}

@Override
public boolean onMenuItemSelected(int featureId, MenuItem item) {
    sDAO.open();        
    if(item.getTitle().equals("Excluir Seguro")){
        sDAO.selecionaSeguro(seguro.getId());           
        adapter.clearList();
        buildList();
        sDAO.close();   
    } else if(item.getTitle().equals("Selecionar Seguro")){
        sDAO.removeSeguro(seguro.getId());
    }
    return super.onMenuItemSelected(featureId, item);
}

リストビューからのxml

  <ListView
                android:id="@+id/lvSeguroPrincipal"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_above="@+id/imgFaixaSeguro2"
                android:layout_alignParentLeft="true"
                android:layout_below="@+id/imgFaixaSeguro"
                android:divider="@android:color/transparent"
                android:longClickable="true" >
4

2 に答える 2

0

消費された場合、setOnItemLongClickListener は true を返す必要があります。ここを参照してください。

   lv.setOnItemLongClickListener(new OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {              
            seguro = (SeguroSelecaoModel)adapter.getItem(position);
            return true;
        }
    });
于 2014-01-09T18:37:54.147 に答える