删除后android刷新Listview

问题描述

删除后android刷新Listview

在我的item删除后我想要刷新我的listview。但是好像不起作用,我是少了什么东西了么?我用了listAdapter.notifyDataSetChanged();也不起作用。有没有人能帮帮我?谢谢。

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        getActivity().setContentView(R.layout.dl_listview);

        View empty = getActivity().findViewById(R.id.empty);
        DLListView = (ListView) getActivity().findViewById(R.id.DLListView);
        DLListView.setEmptyView(empty);

        if (!Environment.getExternalStorageState().equals(
                Environment.MEDIA_MOUNTED)) {
            Toast.makeText(getActivity(),
                    "Error! No SDCARD Found!",
                    Toast.LENGTH_LONG).show();
        } else {
            File directory = new File(Environment.getExternalStorageDirectory()
                    + File.separator + "St");
            directory.mkdirs();
        }
        DLListView = (ListView) getActivity().findViewById(R.id.DLListView);

        myList = new ArrayList<String>();

        File sdCard = Environment.getExternalStorageDirectory();
        file = new File(sdCard.getAbsolutePath() + "/St/");

        File list[] = file.listFiles();

        for (int i = 0; i < list.length; i++) {
            String fileName = list[i].getName();
            fileName = fileName.replace(".txt", "");
            myList.add(fileName);

        }

        listAdapter = new ArrayAdapter<String>(getActivity(),
                R.layout.simplerow, myList);

        DLListView.setAdapter(listAdapter);

        DLListView.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                String textToPass = myList.get(position);
                Intent i = new Intent(getActivity(), ViewActivity.class);
                textToPass = textToPass.replace(textToPass + "", textToPass
                        + ".txt");
                i.putExtra("textToPass", textToPass);
                startActivity(i);
            }
        });

        DLListView.setOnItemLongClickListener(new OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view,
                    int position, long id) {
                // TODO Auto-generated method stub
                registerForContextMenu(DLListView);
                return false;
            }
        });

    }

    public void onCreateContextMenu(ContextMenu menu, View v,
            ContextMenuInfo menuInfo) {
        super.onCreateContextMenu(menu, v, menuInfo);
        AdapterContextMenuInfo info = (AdapterContextMenuInfo) menuInfo;
        String name = ((TextView) info.targetView).getText().toString();
        menu.setHeaderTitle(name);
        menu.add(0, v.getId(), 0, "Delete");
    }

    @Override
    public boolean onContextItemSelected(MenuItem item) {

            deletefunc(item.getItemId());

        return true;
    }

    public void deletefunc(int id) {

        String filenamec = fileName1;
        filenamec = filenamec.replace(filenamec + "", filenamec + ".txt");
        File folder = Environment.getExternalStorageDirectory();
        String fileName = folder.getPath() + "/St/" + filenamec;

        File myFile = new File(fileName);
        if (myFile.exists())
            myFile.delete();
        Toast.makeText(getActivity(), fileName1+" Deleted", Toast.LENGTH_SHORT)
        .show();
        listAdapter.remove(listAdapter.getItem(id));
    }

LogCat :

12-26 11:57:27.334: E/AndroidRuntime(5576): FATAL EXCEPTION: main
12-26 11:57:27.334: E/AndroidRuntime(5576): java.lang.IndexOutOfBoundsException: Invalid index 2131034154, size is 1
12-26 11:57:27.334: E/AndroidRuntime(5576):     at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at java.util.ArrayList.get(ArrayList.java:304)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at free.st.app.MyDownloads.deletefunc(MyDownloads.java:137)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at free.st.app.MyDownloads.onContextItemSelected(MyDownloads.java:118)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at android.support.v4.app.FragmentManagerImpl.dispatchContextItemSelected(FragmentManager.java:1933)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:360)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at com.actionbarsherlock.app.SherlockFragmentActivity.onMenuItemSelected(SherlockFragmentActivity.java:200)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at com.android.internal.policy.impl.PhoneWindow$DialogMenuCallback.onMenuItemSelected(PhoneWindow.java:3691)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at com.android.internal.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:735)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at com.android.internal.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:149)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at com.android.internal.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:874)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at com.android.internal.view.menu.MenuDialogHelper.onClick(MenuDialogHelper.java:167)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at com.android.internal.app.AlertController$AlertParams$3.onItemClick(AlertController.java:929)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at android.widget.AdapterView.performItemClick(AdapterView.java:292)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at android.widget.AbsListView.performItemClick(AbsListView.java:1185)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at android.widget.AbsListView$PerformClick.run(AbsListView.java:2713)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at android.widget.AbsListView$1.run(AbsListView.java:3468)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at android.os.Handler.handleCallback(Handler.java:605)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at android.os.Handler.dispatchMessage(Handler.java:92)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at android.os.Looper.loop(Looper.java:137)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at android.app.ActivityThread.main(ActivityThread.java:4512)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at java.lang.reflect.Method.invokeNative(Native Method)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at java.lang.reflect.Method.invoke(Method.java:511)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:982)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:749)
12-26 11:57:27.334: E/AndroidRuntime(5576):     at dalvik.system.NativeStart.main(Native Method)

解决方案

listAdapter.notifyDataSetChanged();

不起作用因为在你的adapter中你什么都没有。你没有在listAdapter中删除任何东西,所以什么都没有作用。改下onContextMenuItemSelected()成这样:

@Override
    public boolean onContextItemSelected(MenuItem item) {
    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo();
    int position = info.position;
    deletefunc(position);
    return true;
    }

然后可以在deletefunc()试着用下listAdapter.remove(listAdapter.getItem(id))。然后应该可以自动调用notifyDataSetChanged();

解决方案二:

代码逻辑很混乱啊,你要删除的是menuitem的id还是adapter的itemid?无论如何,你传入的是menuitem的id,而listAdapter.getItem(id)获得的是通过位置获得adatper的item。

解决方案三:

我没看见你是从adapters list删除element。你尅有调用listAdapter.remove(myFile),这个是可以删除element的,或者也可以调用notifyDataSetChanged()

时间: 2025-01-20 11:08:33

删除后android刷新Listview的相关文章

fragment-listview删除item后Fragment刷新问题

问题描述 listview删除item后Fragment刷新问题 android开发 我的Fragment中有一个listview,设置了长按删除item的功能,现在的问题是,我adapter.notifyDataSetChanged();是会重新加载listview,但是我的listview下面有一个imageview,就会出现删除的那个item空白,而imageview不会占据那个删除的item的位置,比如说,我123+,删除3,就会出现12 +,我不会删除那个空白,我就想能不能重新加载这个

android中ListView数据刷新时的同步方法

  本文实例讲述了android中ListView数据刷新时的同步方法.分享给大家供大家参考.具体实现方法如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67

Android中ListView绑定CheckBox实现全选增加和删除功能(DEMO)_Android

ListView控件还是挺复杂的,也是项目中应该算是比较常用的了,所以写了一个小Demo来讲讲,主要是自定义adapter的用法,加了很多的判断等等等等-.我们先来看看实现的效果吧! 好的,我们新建一个项目LvCheckBox 我们事先先把这两个布局写好吧,一个是主布局,还有一个listview的item.xml,相信不用多说 activity_main.xml <LinearLayout xmlns:android="http://schemas.android.com/apk/res/

Android的ListView多选删除操作实现代码_Android

最近尝试做了个listview的多选demo,网上看其他人的例子感觉不是很难,自己动手做了下,各种细节问题,没那么简单啊.既然做了,简单写个笔记记录下. 练手demo,命名笔记乱,不要介意哦. 主界面布局activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/to

Android实现ListView左右滑动删除和编辑_Android

有时候,为了实现项目中的需求,完成设计好的用户交互体验,不的不把这些View重新改造成自己想要的效果. Android原生的ListView是不支持左右滑动的,但是看到微信电话本上,联系人可以左右滑动进行操作的,就通过自己的设想和思路,并加以实现了. 思路: 1.获取到手指放到屏幕时的x,y位置,并判断点击的处于ListView的那个position. 2.判断滑动的方向,如果是上下方向,touch事件就交给ListView处理:如果是左右方向,就禁止ListView进行滑动. 3.根据手指的移

android 中listview中的edittext 如何让其输入特定值后自动跟新数据库?

问题描述 android 中listview中的edittext 如何让其输入特定值后自动跟新数据库? android 中listview中的edittext 如何让其输入特定值后自动跟新数据库? 解决方案 写一个TextWatcher 作为监听事件,然后在监听事件里面对数据库进行更新操作. 可参考: http://blog.csdn.net/walker02/article/details/7234458 解决方案二: listView中的item有监听方法item.onItemClickLi

Android使用listview实现分页刷新(线程休眠模拟)_Android

当要显示的数据过多时,为了更好的提升用户感知,在很多APP中都会使用分页刷新显示,比如浏览新闻,向下滑动到当前ListView的最后一条信息(item)时,会提示刷新加载,然后加载更新后的内容.此过程大致分以下几步: 1.当前Activity implements OnScallListenner: 2.实现接口的方法: 3.ListView注册滚动监听: 4. Adapter(自定义或者安卓自带)为每个item填充数据: 5.获得第二页以后的数据后,adater增加数据并刷新notifyDat

Android自定义listview布局实现上拉加载下拉刷新功能_Android

listview实现上拉加载以及下拉刷新的方式有很多.下面是我写的一种自定义的布局,复用性也比较的强.首先就是继承的listview的自定义view.      AutoListView.Java: package com.example.mic.testdemo.view; import android.annotation.TargetApi; import android.content.Context; import android.os.Build; import android.os

Android使用ListView批量删除item的方法_Android

本文实例讲述了Android使用ListView批量删除item的方法.分享给大家供大家参考,具体如下: 利用CheckBox选中一个或多个item,最后批量删除它们. 程序运行效果图如下:   下面开始上码: (代码已更正,已解决滚动时紊乱的问题) package com.test.adapter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;