从listview中删除Viewat(位置),导致Android中出现错误

从listview中删除Viewat(位置),导致Android中出现错误,android,listview,android-listview,android-arrayadapter,Android,Listview,Android Listview,Android Arrayadapter,对于我的listview活动,adapterView中出现错误unsupportedOperationException现在我不知道如何修改数组和适配器,reading说我必须修改数组列表,但我的活动是一个完全不同的结构,请为我提供一些用于从listview删除项目的代码,或者为我的代码提供一个解决方案 public class DirMusic extends Activity { ListView listSongs; ArrayList<Song> songs;

对于我的listview活动,adapterView中出现错误unsupportedOperationException现在我不知道如何修改数组和适配器,reading说我必须修改数组列表,但我的活动是一个完全不同的结构,请为我提供一些用于从listview删除项目的代码,或者为我的代码提供一个解决方案

public class DirMusic extends Activity {
    ListView listSongs;
    ArrayList<Song> songs;
    File musicFolder;
    LinearLayout songsView;
    SimpleAdapter adapter;

    @Override
    public void onCreate(Bundle state) {
        super.onCreate(state);
        setContentView(R.layout.activity_dir_music);

        // get the list of files and place them in ListView
        listSongs = (ListView) this.findViewById(R.id.listSongs);
        songsView = (LinearLayout) this.findViewById(R.id.songsView);   
        final AlertDialog.Builder alertDialog = new AlertDialog.Builder(this);
        alertDialog.setTitle("Confirm Delete...");
        alertDialog.setMessage("Are you sure you want delete this?");

        musicFolder = new File("/storage/extSdCard/MUSIC");
//      musicFolder = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS);
        listSongs.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> view, View item,
                    final int position, long id) {

                // Your method to play here

            }
        });
        bindSongsToListView(musicFolder);
        songsView.setVisibility(View.VISIBLE);  



    listSongs.setOnItemLongClickListener(new OnItemLongClickListener() {

        public boolean onItemLongClick( final AdapterView<?> arg0, View v,
                final int position, long id) {
            // TODO Auto-generated method stub


             AlertDialog.Builder adb=new AlertDialog.Builder(DirMusic.this);
             adb.setTitle("Delete?");
             adb.setMessage("Are you sure you want to delete " + position);
             adb.setNegativeButton("Cancel", null);
             adb.setPositiveButton("Ok", new AlertDialog.OnClickListener() {
                 public void onClick(DialogInterface dialog, int which) {            

                     listSongs.removeViewAt(position);//you can delete your item here

                     adapter.notifyDataSetChanged();

                 }});
             adb.show();

             return true;

             }
         });

}


and logCat 03-04 10:30:43.652: E/AndroidRuntime(14787): FATAL EXCEPTION: main
03-04 10:30:43.652: E/AndroidRuntime(14787): java.lang.UnsupportedOperationException: removeViewAt(int) is not supported in AdapterView
03-04 10:30:43.652: E/AndroidRuntime(14787):    at android.widget.AdapterView.removeViewAt(AdapterView.java:520)
03-04 10:30:43.652: E/AndroidRuntime(14787):    at com.gimi.dirmusic.DirMusic$2$1.onClick(DirMusic.java:136)
03-04 10:30:43.652: E/AndroidRuntime(14787):    at com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:185)
03-04 10:30:43.652: E/AndroidRuntime(14787):    at android.os.Handler.dispatchMessage(Handler.java:99)
03-04 10:30:43.652: E/AndroidRuntime(14787):    at android.os.Looper.loop(Looper.java:137)
03-04 10:30:43.652: E/AndroidRuntime(14787):    at android.app.ActivityThread.main(ActivityThread.java:5419)
03-04 10:30:43.652: E/AndroidRuntime(14787):    at java.lang.reflect.Method.invokeNative(Native Method)
03-04 10:30:43.652: E/AndroidRuntime(14787):    at java.lang.reflect.Method.invoke(Method.java:525)
03-04 10:30:43.652: E/AndroidRuntime(14787):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
03-04 10:30:43.652: E/AndroidRuntime(14787):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
03-04 10:30:43.652: E/AndroidRuntime(14787):    at dalvik.system.NativeStart.main(Native Method)
03-04 10:30:44.913: I/Process(14787): Sending signal. PID: 14787 SIG: 9
公共类音乐扩展活动{
列表视图列表歌曲;
雅乐歌曲;
文件音乐文件夹;
线性布局songsView;
SimpleAdapter适配器;
@凌驾
创建时的公共void(捆绑状态){
super.onCreate(state);
setContentView(R.layout.activity\u dir\u music);
//获取文件列表并将其放置在ListView中
listSongs=(ListView)this.findViewById(R.id.listSongs);
songsView=(LinearLayout)this.findviewbyd(R.id.songsView);
final AlertDialog.Builder AlertDialog=新建AlertDialog.Builder(此);
alertDialog.setTitle(“确认删除…”);
alertDialog.setMessage(“确实要删除此项吗?”);
musicFolder=新文件(“/storage/extSdCard/MUSIC”);
//musicFolder=Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY\u下载);
setOnItemClickListener(新的OnItemClickListener(){
@凌驾
公共控件单击(AdapterView视图、视图项、,
最终整数位置,长id){
//你在这里玩的方法
}
});
bindSongsToListView(音乐文件夹);
设置可见性(View.VISIBLE);
setOnItemLongClickListener(新的OnItemLongClickListener(){
长单击(最终适配器视图arg0,视图v,
最终整数位置,长id){
//TODO自动生成的方法存根
AlertDialog.Builder adb=新建AlertDialog.Builder(DirMusic.this);
adb.setTitle(“删除?”);
adb.setMessage(“您确定要删除”+位置);
adb.setNegativeButton(“取消”,空);
adb.setPositiveButton(“确定”,新建AlertDialog.OnClickListener(){
public void onClick(DialogInterface dialog,int其中){
listSongs.removeViewAt(位置);//您可以在此处删除项目
adapter.notifyDataSetChanged();
}});
adb.show();
返回true;
}
});
}
和logCat 03-04 10:30:43.652:E/AndroidRuntime(14787):致命异常:main
03-04 10:30:43.652:E/AndroidRuntime(14787):java.lang.UnsupportedOperationException:removeViewAt(int)在AdapterView中不受支持
03-04 10:30:43.652:E/AndroidRuntime(14787):在android.widget.AdapterView.removeViewAt(AdapterView.java:520)
03-04 10:30:43.652:E/AndroidRuntime(14787):在com.gimi.dirmusic.dirmusic$2$1.onClick(dirmusic.java:136)
03-04 10:30:43.652:E/AndroidRuntime(14787):在com.android.internal.app.AlertController$ButtonHandler.handleMessage(AlertController.java:185)
03-04 10:30:43.652:E/AndroidRuntime(14787):在android.os.Handler.dispatchMessage(Handler.java:99)上
03-04 10:30:43.652:E/AndroidRuntime(14787):在android.os.Looper.loop(Looper.java:137)
03-04 10:30:43.652:E/AndroidRuntime(14787):位于android.app.ActivityThread.main(ActivityThread.java:5419)
03-04 10:30:43.652:E/AndroidRuntime(14787):位于java.lang.reflect.Method.Invokenactive(本机方法)
03-04 10:30:43.652:E/AndroidRuntime(14787):位于java.lang.reflect.Method.invoke(Method.java:525)
03-04 10:30:43.652:E/AndroidRuntime(14787):在com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1187)
03-04 10:30:43.652:E/AndroidRuntime(14787):位于com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
03-04 10:30:43.652:E/AndroidRuntime(14787):在dalvik.system.NativeStart.main(本机方法)
03-04 10:30:44.913:I/进程(14787):发送信号。PID:14787信号:9

要删除列表视图的任何元素,您应该删除适配器中数组列表的元素。为此,您可以创建methode removeItem(位置)并从适配器数组中删除项,然后调用notifyDatasetChanged()


我希望它能对您有所帮助。

对于每个有问题的人,最后一项不会被删除或替换

ImageAdapter mImageAdapter;
//...
int pos;
// set pos in range 0 to mImageAdapter.getCount()-1
mImageAdapter.itemList.remove(pos);
mImageAdapter.notifyDataSetChanged();
recyclerView.removeViewAt(位置)


linearLayoutAdapter.removeViewAt(位置)

您不应该从ListView中删除项,应该从其列表中删除元素,然后刷新ListView只需从列表中删除项,然后再从适配器中删除。notifydatasetChanged()。getView()真是一团糟