Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/189.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列表视图刷新_Android_Dom_Xml Parsing_Android Listview - Fatal编程技术网

Android列表视图刷新

Android列表视图刷新,android,dom,xml-parsing,android-listview,Android,Dom,Xml Parsing,Android Listview,我有一个ListView,它通过数组(在另一个类中,我通过它的对象访问它)向我显示一些数据 每当我通过上下文菜单从ListView中删除一个元素时,列表不会刷新,而是从数组中删除该元素。如何刷新列表以显示此信息 代码: public void onCreateContextMenu(ContextMenu菜单,视图v, 上下文菜单信息(menuInfo){ if(v.getId()==R.id.mainListView){ AdapterView.AdapterContextMenuInfo信息

我有一个ListView,它通过数组(在另一个类中,我通过它的对象访问它)向我显示一些数据

每当我通过上下文菜单从ListView中删除一个元素时,列表不会刷新,而是从数组中删除该元素。如何刷新列表以显示此信息

代码:

public void onCreateContextMenu(ContextMenu菜单,视图v,
上下文菜单信息(menuInfo){
if(v.getId()==R.id.mainListView){
AdapterView.AdapterContextMenuInfo信息=(AdapterView.AdapterContextMenuInfo)菜单信息;
职位=信息职位;
菜单.设置标题(股票[信息位置]);
字符串[]menuItems=stt;

对于(int i=0;i,必须通知ListView适配器数据已更改

listViewAdapater.notifyDataSetChanged();

如果由于某种原因无法正常工作,并且在某些特定情况下,它似乎没有发出通知,那么您可以使用更新的数组通过构造函数重新分配适配器。

尝试getListView()。

我没有
notifyDataSetChanged()
方法(Android 2.3)

以下几点对我很有用:

getListView().invalidate();

在我的例子中,我已经更改了整个适配器,但它仍然没有刷新,因此对我来说,上面描述的方法是唯一有效的解决方案。

为我刷新列表:
listView.invalidateViews();

    private static ArrayList<Radio> m_streamsList;

    final ListView listView = (ListView) rootView.findViewById(R.id.stream_listRS);

    //my class where i insert data into my array
    m_myDBHelp = new DBHelper();
    m_streamsList = m_myDBHelp.selectStreamsList();

    // my list adapter - this is a class created by me
    RadioAdapter adapt = new RadioAdapter(context, m_streamsList);
    listView.setAdapter(adapt);

    ////////////------------- so . when i inserted a row in db, i need to refresh the list
    m_myDBHelp.insertStreamIntoDB(String name, String url);
    /// in my case method invalidate works fine
    listView.invalidate();
    m_streamsList = null;
    m_streamsList = m_myDBHelp.selectStreamsList();

    //you need to set adapter again
    RadioAdapter adapt2 = new RadioAdapter(context, m_streamsList);
    listView.setAdapter(adapt2);






import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;

import com.example.npopa.musicplayern.R;
import com.example.npopa.musicplayern.Radio;

import java.util.ArrayList;

public class RadioAdapter extends BaseAdapter{
private ArrayList<Radio> m_streams;
private LayoutInflater m_stramInf;

public RadioAdapter(Context c, ArrayList<Radio> theStreams){
    m_streams = theStreams;
    m_stramInf = LayoutInflater.from(c);
}

@Override
public int getCount() {
    return m_streams.size();
}

@Override
public Object getItem(int arg0) {
    return null;
}

@Override
public long getItemId(int arg0) {
    return 0;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    //map to radio_s layout
    LinearLayout streamLay = (LinearLayout) m_stramInf.inflate(R.layout.all_songs_t, parent, false);

    TextView name = (TextView) streamLay.findViewById(R.id.song_title);
    TextView url = (TextView) streamLay.findViewById(R.id.song_artist);
    ImageView imgALb = (ImageView) streamLay.findViewById(R.id.albumicon);

    //get all_songs_t using position
    Radio currStream = m_streams.get(position);
    name.setText(currStream.getName());
    url.setText(currStream.getUrl());
    imgALb.setImageResource(R.drawable.radio_stream);

    //set position as tag
    streamLay.setTag(position);
    return streamLay;
}
它可以:

mDataChanged = true;
rememberSyncState();
requestLayout();
invalidate();
这种情况下,需要管理某些列表项的删除或同时删除所有元素


在API 24中测试。

我需要把这一行放在哪里?就在stockname之后。删除(post-1);listViewAdapter只是一个例子,您必须用您的适配器的调用来替换它。如果您无法访问它,请将其作为该类的全局变量。尝试重新初始化适配器,就像您创建它时所做的那样。嗨,兄弟们!我知道上帝解决方案应该是notifyDataSetChaned(),但我没有为我工作。
t为每个元素创建了一个带有向上和向下箭头的列表。如果用户按下按钮,两个项目将相互交换。因此您建议的方法是
t为我工作,我必须重置适配器:lw.setAdapter(mAdapter).Thx:Karoly来自Hungary@blindstuff重新初始化适配器需要花费大量资源和垃圾收集,不建议您需要使列表()无效。在我的例子中,我使列表()无效,使用null元素初始化列表,然后重新初始化列表
public class Radio {
private int id;
private String name;
private String url;

public Radio(int id, String name, String url) {
    this.id = id;
    this.name = name;
    this.url = url;
}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getUrl() {
    return url;
}

public void setUrl(String url) {
    this.url = url;
}
}
mDataChanged = true;
rememberSyncState();
requestLayout();
invalidate();