Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android notifyDataSetChanged未更新ListView_Android_Android Listview_Android Arrayadapter - Fatal编程技术网

Android notifyDataSetChanged未更新ListView

Android notifyDataSetChanged未更新ListView,android,android-listview,android-arrayadapter,Android,Android Listview,Android Arrayadapter,我已经阅读了所有关于这个问题的帖子,但是我仍然无法更新我的ListView。 我正在扩展列表活动。 这是我的ArrayAdapter: public List<String> songs = new ArrayList<String>(); public ArrayAdapter<String> allsongs; @Override public void onCreate(Bundle savedInstanceState) { su

我已经阅读了所有关于这个问题的帖子,但是我仍然无法更新我的ListView。 我正在扩展列表活动。 这是我的ArrayAdapter:

 public List<String> songs = new ArrayList<String>();    
 public ArrayAdapter<String> allsongs;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    allsongs = new ArrayAdapter<String>(this,
            R.layout.song_items, songs);

 BindAllSongs();        
 ListView listView=getListView();
    registerForContextMenu(listView);
 }
在我的BindAllSongs()中;方法:

这非常有效(文件正在从sd卡中删除),但列表永远不会更新。当我导航到别处,然后返回ListView时,该项就消失了。(返回到ListView时,再次调用BindAllSongs()
感谢您的帮助,如果您需要更多信息,请告诉我。

ArrayAdapter中的值实际上没有绑定到文件系统。您需要对被删除的项调用remove,然后可以调用notifyDataSetChanged(尽管您可能不需要)。

ArrayAdapter中的值实际上没有绑定到文件系统。您需要对已删除的项目调用remove,然后可以调用notifyDataSetChanged(尽管您可能不需要)。

谢谢,但我不知道如何操作。您可以调用
((ArrayAdapter)getListAdapter())。remove(项目)
。您可以使用
getListAdapter().getItem(位置)
获取项目。您还可以覆盖适配器的remove方法,让该方法删除文件并从列表中删除该项。谢谢!我会试着回去报到。我这里有很多麻烦。由于我正在从布尔值onContextItemSelected中删除文件,
位置
没有值。我尝试设置
受保护的void onListItemLongClick(ListView l,View v,int position,long id){item=getListAdapter().getItem(position)}
,但没有帮助。我在这里真的迷路了…好吧,看起来它正在工作…我做了
objectitem2=getListView().getAdapter().getItem(info.position);((ArrayAdapter)getListAdapter())。删除(项2);delete()((ArrayAdapter)getListAdapter())。删除(item2)发出警告
类型安全:方法移除(对象)属于原始类型ArrayAdapter。泛型类型ArrayAdapter的引用应该参数化
,尽管它仍在工作。这是最好的方法吗?谢谢,但我不知道怎么做。您可以调用
((ArrayAdapter)getListAdapter())。删除(项)
。您可以使用
getListAdapter().getItem(位置)
获取项目。您还可以覆盖适配器的remove方法,让该方法删除文件并从列表中删除该项。谢谢!我会试着回去报到。我这里有很多麻烦。由于我正在从布尔值onContextItemSelected中删除文件,
位置
没有值。我尝试设置
受保护的void onListItemLongClick(ListView l,View v,int position,long id){item=getListAdapter().getItem(position)}
,但没有帮助。我在这里真的迷路了…好吧,看起来它正在工作…我做了
objectitem2=getListView().getAdapter().getItem(info.position);((ArrayAdapter)getListAdapter())。删除(项2);delete()((ArrayAdapter)getListAdapter())。删除(item2)发出警告
类型安全:方法移除(对象)属于原始类型ArrayAdapter。泛型类型ArrayAdapter的引用应该参数化
,尽管它仍在工作。这是最好的方法吗?
@Override
public boolean onContextItemSelected(MenuItem item) {
    AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
    switch (item.getItemId()) {
        case R.id.delete_file:
            File file = new File(Environment.getExternalStorageDirectory().getPath() + "/AudioStreamRecorder/" + getListView().getAdapter().getItem(info.position).toString());
            file.delete();

            runOnUiThread(new Runnable() {
                public void run() {
                    allsongs.notifyDataSetChanged();    
                }
            });

            return true;
        case R.id.cancel:

            return true;
        default:
            return super.onContextItemSelected(item);
    }
}
public void BindAllSongs() {
 ...
 ...
setListAdapter(allsongs);
    }