如何列表行的删除后刷新的ListView [英] How to Refresh ListView after deletion of list row
本文介绍了如何列表行的删除后刷新的ListView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我已经写了code删除列表视图中的一个行,但该行仍然可见在列表中,我使用 notifyDataSetChanged()
这里是我使用:
公共类MyAdapter扩展ArrayAdapter<&GT运输; { 上下文语境;
ArrayList的<&GT运输; ArrayList的;
LayoutInflater layoutInflater;
INT资源;
ViewHolder viewHolder;
查看视图。 助手帮手;
清单<&的NameValuePair GT; PARAMS;
的JSONObject的JSONObject;
字符串则strName = NULL,strAlwaysZero = NULL,strPosition = NULL;
整数taggedPosition; 公共MyAdapter(上下文的背景下,INT资源的ArrayList<运输及GT;的ArrayList){
超(背景下,资源,ArrayList的);
layoutInflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.context =背景;
this.resource =资源;
this.arrayList = ArrayList的;
} @覆盖
公共查看getView(最终诠释的立场,观点convertView,父母的ViewGroup){
//转换视图=设计
鉴于= convertView;
如果(查看== NULL){
viewHolder =新ViewHolder();
鉴于= layoutInflater.inflate(资源,NULL);
viewHolder.textName =(TextView中)view.findViewById(R.id.tvName);
viewHolder.btnDelete =(的ImageButton)view.findViewById(R.id.btnDelete);
view.setTag(viewHolder);
}其他{
viewHolder =(ViewHolder)view.getTag();
} viewHolder.textName.setText(arrayList.get(位置).getName());
viewHolder.btnDelete.setTag(位置);
viewHolder.btnDelete.setOnClickListener(新OnClickListener(){ @覆盖
公共无效的onClick(最终查看V){
taggedPosition =(整数)v.getTag();
Log.d(位置:: - Integer.toString(taggedPosition)); 新DeleteRecord()执行();
}
}); view.setOnClickListener(新OnClickListener(){ @覆盖
公共无效的onClick(视图v){
}
}); 返回视图。
}类DeleteRecord扩展的AsyncTask<字符串,字符串,字符串> { / **
*启动后台线程显示进度对话框之前
* * / @覆盖
在preExecute保护无效(){
super.on preExecute(); } @覆盖
保护字符串doInBackground(字符串参数... args){ strUrlUpdate =HTTP://somerurl.tld/result.php
助手=新助手(); PARAMS =新的ArrayList<&的NameValuePair GT;();
params.add(新BasicNameValuePair(SNAME,则strName));
params.add(新BasicNameValuePair(SKEY,strAlwaysZero)); strServerResult = helper.getHttpPost(strUrlUpdate,则params); strStatusId =0;
strMessage =未知状态!; 尝试{
JSONObject的=新的JSONObject(strServerResult);
strStatusId = jsonObject.getString(StatusID); 如果(!strStatusId.equals(0)){
Log.d(背景位置:: - Integer.toString(taggedPosition));
arrayList.remove(taggedPosition);
}
strMessage = jsonObject.getString(信息);
}赶上(JSONException E){
e.printStackTrace();
} 返回null; }
/ **
*在完成后台任务之后辞退进度对话框
* ** /
保护无效onPostExecute(字符串FILE_URL){ // prepare保存数据
如果(strStatusId.equals(0)){
Toast.makeText(背景下,无法删除记录,Toast.LENGTH_SHORT).show();
}其他{
notifyDataSetChanged();
Toast.makeText(背景下,记录成功删除,Toast.LENGTH_SHORT).show();
} }}
解决方案
把 arrayList.remove(taggedPosition)
在 doinBackground()
方法。
类DeleteRecord扩展的AsyncTask<字符串,字符串,字符串> { / **
*启动后台线程显示进度对话框之前
* * / @覆盖
在preExecute保护无效(){
super.on preExecute(); } @覆盖
保护字符串doInBackground(字符串参数... args){ strUrlUpdate =HTTP://somerurl.tld/result.php
助手=新助手(); PARAMS =新的ArrayList<&的NameValuePair GT;();
params.add(新BasicNameValuePair(SNAME,则strName));
params.add(新BasicNameValuePair(SKEY,strAlwaysZero)); strServerResult = helper.getHttpPost(strUrlUpdate,则params); strStatusId =0;
strMessage =未知状态!; 尝试{
JSONObject的=新的JSONObject(strServerResult);
strStatusId = jsonObject.getString(StatusID); 如果(!strStatusId.equals(0)){
arrayList.remove(taggedPosition);
}
strMessage = jsonObject.getString(信息);
}赶上(JSONException E){
e.printStackTrace();
} 返回null; }
/ **
*在完成后台任务之后辞退进度对话框
* ** /
保护无效onPostExecute(字符串FILE_URL){ // prepare保存数据
如果(strStatusId.equals(0)){
Toast.makeText(背景下,无法删除记录,Toast.LENGTH_SHORT).show();
}其他{
notifyDataSetChanged();
Toast.makeText(背景下,记录成功删除,Toast.LENGTH_SHORT).show();
} }}
I have written a code to delete a row in a list view but that row is still visible in a list, I am using notifyDataSetChanged()
and here is what i have used:
public class MyAdapter extends ArrayAdapter<Transport> {
Context context;
ArrayList<Transport> arrayList;
LayoutInflater layoutInflater;
int resource;
ViewHolder viewHolder;
View view;
Helper helper;
List<NameValuePair> params;
JSONObject jsonObject;
String strName = null, strAlwaysZero = null, strPosition = null;
Integer taggedPosition;
public MyAdapter(Context context, int resource, ArrayList<Transport> arrayList) {
super(context, resource, arrayList);
layoutInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
this.context = context;
this.resource = resource;
this.arrayList = arrayList;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
// convert view = design
view = convertView;
if (view == null) {
viewHolder = new ViewHolder();
view = layoutInflater.inflate(resource, null);
viewHolder.textName = (TextView) view.findViewById(R.id.tvName);
viewHolder.btnDelete = (ImageButton) view.findViewById(R.id.btnDelete);
view.setTag(viewHolder);
} else {
viewHolder = (ViewHolder) view.getTag();
}
viewHolder.textName.setText(arrayList.get(position).getName());
viewHolder.btnDelete.setTag(position);
viewHolder.btnDelete.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
taggedPosition = (Integer) v.getTag();
Log.d("Position::-", Integer.toString(taggedPosition));
new DeleteRecord().execute();
}
});
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
}
});
return view;
}
class DeleteRecord extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... args) {
strUrlUpdate = "http://somerurl.tld/result.php";
helper = new Helper();
params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("sName", strName));
params.add(new BasicNameValuePair("sKey", strAlwaysZero));
strServerResult = helper.getHttpPost(strUrlUpdate ,params);
strStatusId = "0";
strMessage = "Unknow Status!";
try {
jsonObject = new JSONObject(strServerResult);
strStatusId = jsonObject.getString("StatusID");
if (!strStatusId.equals("0")) {
Log.d("background-Position::-", Integer.toString(taggedPosition));
arrayList.remove(taggedPosition);
}
strMessage = jsonObject.getString("Message");
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// Prepare Save Data
if (strStatusId.equals("0")) {
Toast.makeText(context, "Unable to remove record", Toast.LENGTH_SHORT).show();
} else {
notifyDataSetChanged();
Toast.makeText(context, "Record removed successfully", Toast.LENGTH_SHORT).show();
}
}
}
解决方案
put arrayList.remove(taggedPosition)
in doinBackground()
method.
class DeleteRecord extends AsyncTask<String, String, String> {
/**
* Before starting background thread Show Progress Dialog
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
}
@Override
protected String doInBackground(String... args) {
strUrlUpdate = "http://somerurl.tld/result.php";
helper = new Helper();
params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("sName", strName));
params.add(new BasicNameValuePair("sKey", strAlwaysZero));
strServerResult = helper.getHttpPost(strUrlUpdate ,params);
strStatusId = "0";
strMessage = "Unknow Status!";
try {
jsonObject = new JSONObject(strServerResult);
strStatusId = jsonObject.getString("StatusID");
if (!strStatusId.equals("0")) {
arrayList.remove(taggedPosition);
}
strMessage = jsonObject.getString("Message");
} catch (JSONException e) {
e.printStackTrace();
}
return null;
}
/**
* After completing background task Dismiss the progress dialog
* **/
protected void onPostExecute(String file_url) {
// Prepare Save Data
if (strStatusId.equals("0")) {
Toast.makeText(context, "Unable to remove record", Toast.LENGTH_SHORT).show();
} else {
notifyDataSetChanged();
Toast.makeText(context, "Record removed successfully", Toast.LENGTH_SHORT).show();
}
}
}
这篇关于如何列表行的删除后刷新的ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文