帮助提神清单,notifyDataSetChanged() [英] Help refreshing list with notifyDataSetChanged()

查看:95
本文介绍了帮助提神清单,notifyDataSetChanged()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我工作的那是我的应用程序的一部分,一个简单的文件浏览器,我增加了一些code删除文件,但是我需要的文件列表后的一个项目已经被删除,刷新。这是code我有这么远,我说在我呼吁评论fileList.notifyDataSetChanged(); 但它不为我工作所以基本上我究竟做错了什么?感谢您的帮助。

 私人无效GETDIR(字符串dirPath)
{ 项目=新的ArrayList<串GT;();
 路径=新的ArrayList<串GT;(); 文件f =新的文件(dirPath);
 文件[] =文件f.listFiles(); 如果(!dirPath.equals(根))
 {  item.add(根);
  path.add(根);  item.add(../);
  path.add(f.getParent()); } 的for(int i = 0; I< files.length;我++)
 {
   文件fil​​e =文件[I]
   path.add(file.getPath());
   如果(file.isDirectory())
    item.add(file.getName()+/);
   其他
    item.add(file.getName());
 } ArrayAdapter<串GT;的fileList =新ArrayAdapter<串GT;(这一点,R.layout.row,项目);
 setListAdapter(的fileList);
} @覆盖
 保护无效onListItemClick(ListView中升,视图V,最终诠释的位置,长的id){  最终文件的文件=新的文件(path.get(位置));  如果(file.isDirectory())
  {
   如果(file.canRead())
    GETDIR(path.get(位置));
   其他
   {
    新AlertDialog.Builder(本)
    .setIcon(R.drawable.boot)
    .setTitle([+ file.getName()+]文件夹无法读取!)
    .setPositiveButton(OK,
      新DialogInterface.OnClickListener(){       @覆盖
       公共无效的onClick(DialogInterface对话,诠释它){
       }
      })。显示();
   }
  }
  其他
  {
        最终的CharSequence [] =项目{信息,重命名,删除};        AlertDialog.Builder建设者=新AlertDialog.Builder(本);
        builder.setTitle(为选项+ file.getName());
        builder.setItems(项目,新DialogInterface.OnClickListener(){
            公共无效的onClick(DialogInterface对话,诠释项){
                如果(项目== 0)
                {
                    AlertDialog.Builder建设者=新AlertDialog.Builder(Installed.this);
                    SimpleDateFormat的SDF =新的SimpleDateFormat(MM / DD / YYYY HH:MM:SS);
                    builder.setIcon(R.drawable.info)
                           .setTitle(file.getName()+信息)
                           .setMessage(路径:+ file.getPath()+\\ n \\ n大小:+(双)file.length()/ 1024 +MBS+\\ n \\ n修改:+ sdf.format(文件。上一次更改()))
                           .setCancelable(假)
                           .setPositiveButton(OK,新DialogInterface.OnClickListener(){
                               公共无效的onClick(DialogInterface对话,诠释的id){
                                 dialog.cancel();
                               }
                           })。显示();                }
                否则如果(项目== 1)
                {
                    // TODO添加重命名code在这里
                    Toast.makeText(Installed.this,重命名,Toast.LENGTH_SHORT).show();
                }
                否则如果(项目== 2)
                {
                    AlertDialog.Builder建设者=新AlertDialog.Builder(Installed.this);
                    builder.setMessage(你确定要删除+ file.getName()+?)
                           .setCancelable(假)
                           .setPositiveButton(是,新DialogInterface.OnClickListener(){
                               公共无效的onClick(DialogInterface对话,诠释的id){
                                   文件F1 =新的文件(file.getPath());
                                    布尔成功= f1.delete();
                                    如果(!成功){
                                    Toast.makeText(Installed.this,无法删除+ file.getName(),Toast.LENGTH_SHORT).show();
                                    }其他{
                                    Toast.makeText(Installed.this,file.getName()+删除!,Toast.LENGTH_SHORT).show();
                                    }
                                    //这是我尝试刷新列表
                                    fileList.notifyDataSetChanged();
                            }
                           })
                           .setNegativeButton(否,新DialogInterface.OnClickListener(){
                               公共无效的onClick(DialogInterface对话,诠释的id){
                                    dialog.cancel();
                               }
                           })。显示();
                }
            }
        })。显示();
  }
 }


解决方案

在之后删除项目,请尝试使用 fileList.remove(theItemYouDeleted) 。这应该删除项目适配器。换句话说,你必须从你的数据和从你的适配器删除。
我希望这有助于

Hi i'm working on a simple file browser that is a part of my app and I have added some code to delete files however I need the list of files to refresh after one item has been deleted. This is the code I have so far and I added a comment in where I call on fileList.notifyDataSetChanged(); however it doesn't work for me so basically what am i doing wrong here? Thank you for any help

private void getDir(String dirPath)
{

 item = new ArrayList<String>();
 path = new ArrayList<String>();

 File f = new File(dirPath);
 File[] files = f.listFiles();

 if(!dirPath.equals(root))
 {

  item.add(root);
  path.add(root);

  item.add("../");
  path.add(f.getParent());

 }

 for(int i=0; i < files.length; i++)
 {
   File file = files[i];
   path.add(file.getPath());
   if(file.isDirectory())
    item.add(file.getName() + "/");
   else
    item.add(file.getName());
 }

 ArrayAdapter<String> fileList = new ArrayAdapter<String>(this, R.layout.row, item);
 setListAdapter(fileList); 
}

 @Override
 protected void onListItemClick(ListView l, View v, final int position, long id) {

  final File file = new File(path.get(position));

  if (file.isDirectory())
  {
   if(file.canRead())
    getDir(path.get(position));
   else
   {
    new AlertDialog.Builder(this)
    .setIcon(R.drawable.boot)
    .setTitle("[" + file.getName() + "] folder can't be read!")
    .setPositiveButton("OK", 
      new DialogInterface.OnClickListener() {

       @Override
       public void onClick(DialogInterface dialog, int which) {
       }
      }).show();
   }
  }
  else
  {
        final CharSequence[] items = {"Info", "Rename", "Delete"};

        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Options for " + file.getName());
        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                if (item == 0)
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(Installed.this);
                    SimpleDateFormat sdf = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
                    builder.setIcon(R.drawable.info)
                           .setTitle(file.getName() + " info")
                           .setMessage("Path: " + file.getPath() + "\n\nSize: " + (double)file.length()/1024 + " mbs" + "\n\nModified: " + sdf.format(file.lastModified()))
                           .setCancelable(false)
                           .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                               public void onClick(DialogInterface dialog, int id) {
                                 dialog.cancel();
                               }
                           }).show();

                }
                else if (item == 1)
                {
                    //TODO Add Rename code here
                    Toast.makeText(Installed.this, "Rename", Toast.LENGTH_SHORT).show();
                }
                else if (item == 2)
                {
                    AlertDialog.Builder builder = new AlertDialog.Builder(Installed.this);
                    builder.setMessage("Are you sure you want to delete " + file.getName() +"?")
                           .setCancelable(false)
                           .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                               public void onClick(DialogInterface dialog, int id) { 
                                   File f1 = new File(file.getPath());
                                    boolean success = f1.delete();
                                    if (!success){
                                    Toast.makeText(Installed.this, "Could not delete " + file.getName(), Toast.LENGTH_SHORT).show();  
                                    }else{
                                    Toast.makeText(Installed.this, file.getName() + " deleted!", Toast.LENGTH_SHORT).show();
                                    }
                                    //This is where I try to refresh the list
                                    fileList.notifyDataSetChanged();
                            }
                           })
                           .setNegativeButton("No", new DialogInterface.OnClickListener() {
                               public void onClick(DialogInterface dialog, int id) {
                                    dialog.cancel();
                               }
                           }).show();
                }
            }
        }).show();
  }
 }

解决方案

After you delete the item, try using fileList.remove(theItemYouDeleted). That should remove the item from the Adapter. In other words you have to delete it from your data and from your adapter. I hope this helps

这篇关于帮助提神清单,notifyDataSetChanged()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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