Daniel_cf 2012-12-26 07:36 采纳率: 100%
浏览 14207
已采纳

删除后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)
  • 写回答

3条回答

  • niangzhi 2012-12-26 08:01
    关注
    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();

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况
  • ¥15 画两个图 python或R