如何列表行的删除后刷新的ListView [英] How to Refresh ListView after deletion of list row

查看:111
本文介绍了如何列表行的删除后刷新的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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆