刚才写了一段代码 想通过点击listview上每一项的imageview删除数据库中对应的这一条数据,
但运行时每次都必须点击两下imageview才能删除这一项,之前想过在listview的适配器中来做这个
操作,但是看过的代码好像都没有这么做过并且这样做的话没法更新数据,现在想问问
有没有什么好的方法可以解决这个问题 。对了,设置focusable和clickable属性也没法处理。设置成imagebutton的话 , 由于listview的每一项是通过反射来获取到的
给imagebutton设置onclick属性的话 ,数据就没法传递了,毕竟还是要删除数据库中的数据
```package com.personal.fyd.blacknumber;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
/**
- Created by asus on 2016/10/19. */
public class MyAdapter extends BaseAdapter {
private List list;
private Context context;
public MyAdapter(List<NumberBean> list, Context context) {
this.list = list;
this.context = context;
// for (NumberBean bean:list
// ) {
// Log.i(context+"",bean.getNumber()+" "+bean.getMode());
// }
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
NumberBean bean;
if (convertView == null) {
convertView = View.inflate(context, R.layout.item, null);
viewHolder = new ViewHolder();
viewHolder.number_tv = (TextView) convertView.findViewById(R.id.tv_number);
viewHolder.mode_tv = (TextView) convertView.findViewById(R.id.tv_mode);
viewHolder.delete_iv = (ImageView) convertView.findViewById(R.id.iv_delete);
convertView.setTag(viewHolder);
}else {
viewHolder = (ViewHolder) convertView.getTag();
}
bean = list.get(position);
viewHolder.number_tv.setText(bean.getNumber());
String mode = bean.getMode();
if ("1".equals(mode)){
viewHolder.mode_tv.setText("电话拦截");
}else if ("2".equals(mode)){
viewHolder.mode_tv.setText("短信拦截");
}else if ("3".equals(mode)){
viewHolder.mode_tv.setText("全部拦截");
}
return convertView;
}
static class ViewHolder {
TextView number_tv;
TextView mode_tv;
ImageView delete_iv;
}
}
package com.personal.fyd.blacknumber;
import android.content.Context;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.Toast;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private final Context context = MainActivity.this;
private ListView lv;
private AlertDialog alertDialog;
private NumberDao numberdao;
private MyAdapter adapter;
private List<NumberBean> list;
private ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
updateLV();
}
private void updateLV() {
list = numberdao.findAll();
adapter = new MyAdapter(list,MainActivity.this);
lv.setAdapter(adapter);
}
private void initView() {
lv = (ListView) findViewById(R.id.lv);
numberdao = new NumberDao(this);
iv = (ImageView) findViewById(R.id.iv_delete);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, final int position, long id) {
Toast.makeText(context,"再次点击删除此项",Toast.LENGTH_SHORT).show();
view.findViewById(R.id.iv_delete).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String num = list.get(position).getNumber();
// Toast.makeText(context,num,Toast.LENGTH_SHORT).show();
numberdao.delete(num);
numberdao.findAll();
updateLV();
}
});
}
});
}
public void delete(View view){
}
public void add(View view){
showDiagle();
}
//显示对话框
private void showDiagle(){
AlertDialog.Builder builder = new AlertDialog.Builder(this);
View view = View.inflate(this,R.layout.diagle,null);
builder.setView(view);
final EditText editText = (EditText) view.findViewById(R.id.blacknumber_et);
final CheckBox call_cb = (CheckBox) view.findViewById(R.id.call_cb);
final CheckBox sms_cb = (CheckBox) view.findViewById(R.id.sms_cb);
Button commit = (Button) view.findViewById(R.id.commit_btn);
Button cancel = (Button)view.findViewById(R.id.cancel_btn);
commit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String number = editText.getText().toString();
//判断是否为空
if (TextUtils.isEmpty(number)){
Toast.makeText(MainActivity.this,"number ",Toast.LENGTH_SHORT).show();
return;
}
String mode;
if (call_cb.isChecked()&&sms_cb.isChecked()){
mode = "3";
}else if (call_cb.isChecked()){
mode = "1";
}else if (sms_cb.isChecked()){
mode = "2";
}else {
Toast.makeText(MainActivity.this,"请至少选择一种拦截方式",Toast.LENGTH_SHORT).show();
return;
}
//操作合法 插入数据
numberdao.insert(number,mode);
//插入成功 重新查询
alertDialog.dismiss();
updateLV();
}
});
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alertDialog.dismiss();
}
});
alertDialog = builder.create();
alertDialog.show();
}
}