我有我的活动适配器来处理我的主要项目列表。当我点击删除时,我想提示用户,如果确认从列表中删除该项并刷新视图。
我有删除项目的逻辑,但似乎并不是将参数传递给OnClickListener的方法。如果单击列表上的按钮,如何捕获单击的位置以及如何将其传递给OnClickListener函数以便删除正确的元素?
任何帮助将不胜感激,
谢谢你, 拉狄克
@Override
public View getView(final int _position, View convertView, ViewGroup parent) {
try {
if(convertView == null){
convertView = layoutInflater.inflate(com.mylist.www.R.layout.activity_main_row,parent,false);
}
TextView textView = (TextView) convertView.findViewById(com.mylist.www.R.id.rowText);
textView.setText(listItems.getJSONObject(_position).getString("description"));
// set the checkbox stuff
CheckBox chkEnabled = (CheckBox) convertView.findViewById(com.mylist.www.R.id.chkEnabled);
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
if (listItems != null){
JSONArray clickedItems = listItems.getJSONObject(_position).getJSONArray("listItems"); // position
Intent intent = new Intent(context, ListActivity.class);
intent.putExtra("listItems", clickedItems.toString());
context.startActivity(intent);
}
} catch (Exception e){
e.printStackTrace();
}
}
});
Button btnNavigate = (Button) convertView.findViewById(com.mylist.www.R.id.btnDelete);
btnNavigate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try{
if (listItems != null){
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
}
} catch (Exception e){
e.printStackTrace();
}
}
});
return convertView;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
DialogInterface.OnClickListener dialogClickListener = new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
try {
switch (which){
case DialogInterface.BUTTON_POSITIVE:
//Yes button clicked
listItems.remove(position); //????? how do I pass it
JSONObject jObj = new JSONObject();
jObj.put("Items", listItems);
editor.putString("json",jObj.toString());
editor.commit();
((MainActivity)context).refreshView();
break;
case DialogInterface.BUTTON_NEGATIVE:
//No button clicked
break;
}
} catch (JSONException e) {
e.printStackTrace();
}
}
};
答案 0 :(得分:1)
嘿,你有一个mistek吗?
Country: US
Phone Code: #VALUE!
替换
listitem.remove(postion)
答案 1 :(得分:1)
为什么不将位置存储在另一个变量中,以后再使用它
int currentPosition;
当用户点击按钮时,在getView()
中存储当前视图位置
currentPosition = position;
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Are you sure?").setPositiveButton("Yes", dialogClickListener)
.setNegativeButton("No", dialogClickListener).show();
然后在你的监听器中使用它
listItems.remove(currentPosition);
答案 2 :(得分:1)
在类
中将currentItemPosition变量声明为全局变量int currentItemPosition;
当用户点击按钮时存储位置
currentItemPosition = _position;
并在你的听众中使用它
listItems.remove(currentItemPosition);
答案 3 :(得分:1)
您可以在充气时为每行设置标记:
view.setTag(position)
然后点击按钮,您可以将该行的位置设为
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//current row view clicked position
int currentItemPosition = (Integer) button.getTag();
//now remove the item from the list at the clicked position
listItems.remove(currentItemPosition);
}
});
通过这种方式,您可以获得用户从列表视图中单击的项目的位置,然后执行进一步的操作。希望这可以帮助你
答案 4 :(得分:1)
通过这种实施,我们无法获得这个位置。如果您想获得职位,请修改您的代码,如下所示 -
AlertDialog.Builder builder = new AlertDialog.Builder(context);
builder.setMessage("Are you sure?").setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
// you can get position here
}
}).setNegativeButton("No", dialogClickListener).show();