Android 每次刷新listview时,刷新listview都会复制行

Android 每次刷新listview时,刷新listview都会复制行,android,android-listview,Android,Android Listview,解决这个问题的可能办法是什么。 我在我的应用程序中向下滑动以刷新listview。但当我尝试刷新它时,它会创建重复的行。 我希望以前更新的行保留在视图中,当我滑动以更新时,它应该在视图顶部附加更新的行(这很正常)。 唯一的问题是行的重复。 这是我的密码 public class MainActivity extends ActionBarActivity implements SwipeRefreshLayout.OnRefreshListener { private String TAG =

解决这个问题的可能办法是什么。 我在我的应用程序中向下滑动以刷新
listview
。但当我尝试刷新它时,它会创建重复的行。 我希望以前更新的行保留在视图中,当我滑动以更新时,它应该在视图顶部附加更新的行(这很正常)。 唯一的问题是行的重复。 这是我的密码

public class MainActivity extends ActionBarActivity implements SwipeRefreshLayout.OnRefreshListener {

private String TAG = MainActivity.class.getSimpleName();

private String URL_TOP_250 = "My_url";

private SwipeRefreshLayout swipeRefreshLayout;
private ListView listView;
private SwipeListAdapter adapter;
private List<Movie> movieList;

// initially offset will be 0, later will be updated while parsing the json
private int offSet = 0;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    listView = (ListView) findViewById(R.id.listView);
    swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);

    movieList = new ArrayList<>();
    adapter = new SwipeListAdapter(this, movieList);
    listView.setAdapter(adapter);

    swipeRefreshLayout.setOnRefreshListener(this);

    /**
     * Showing Swipe Refresh animation on activity create
     * As animation won't start on onCreate, post runnable is used
     */
    swipeRefreshLayout.post(new Runnable() {
                                @Override
                                public void run() {
                                    swipeRefreshLayout.setRefreshing(true);

                                    fetchMovies();
                                }
                            }
    );

}

/**
 * This method is called when swipe refresh is pulled down
 */
@Override
public void onRefresh() {
    fetchMovies();
}

/**
 * Fetching movies json by making http call
 */
private void fetchMovies() {

    // showing refresh animation before making http call
    swipeRefreshLayout.setRefreshing(true);


    String url = URL_TOP_250;

    // Volley's json array request object
    JsonArrayRequest req = new JsonArrayRequest(url,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {
                    Log.d(TAG, response.toString());

                    if (response.length() > 0) {

                        // looping through json and adding to movies list
                        for (int i = 0; i < response.length(); i++) {
                            try {
                                JSONObject movieObj = response.getJSONObject(i);


                                String title = movieObj.getString("title");
                                String desc = movieObj.getString("desc");

                                Movie m = new Movie(title,desc);


                                movieList.add(0,m);
                             //   HashSet hs = new HashSet();
                               // hs.addAll(al);
                                //al.clear();
                                //al.addAll(hs);



                            } catch (JSONException e) {
                                Log.e(TAG, "JSON Parsing error: " + e.getMessage());
                            }
                        }

                        adapter.notifyDataSetChanged();
                    }

                    // stopping swipe refresh
                    swipeRefreshLayout.setRefreshing(false);

                }
            }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Log.e(TAG, "Server Error: " + error.getMessage());

            //Toast.makeText(getApplicationContext(), error.getMessage(), Toast.LENGTH_LONG).show();

            // stopping swipe refresh
            swipeRefreshLayout.setRefreshing(false);
        }
    });

    // Adding request to request queue
    MyApplication.getInstance().addToRequestQueue(req);
}
就打电话

if(movieList!=null) {
  movieList.clear();
}
在取电影之前,只需打电话

if(movieList!=null) {
  movieList.clear();
}
在获取电影之前,请执行以下步骤:

  • 调用onRefresh()时清除列表视图中的所有项目
  • 致电webservice并获取电影列表
  • 设置列表适配器
  • 遵循以下步骤:

  • 调用onRefresh()时清除列表视图中的所有项目
  • 致电webservice并获取电影列表
  • 设置列表适配器

  • 你好,vaibhav,它正在工作,但是如果我刷新它3次,应用程序就会崩溃。我已经将代码作为fetchMovies()方法上的第2条语句放在顶部。请发送一份日志副本。SwipeListAdapter.java的第60行似乎有一个arrayoutofboundexception,我们可以看看吗?你好,vaibhav,它正在工作,但是如果我刷新它3次,应用程序就会崩溃。我已经将代码作为fetchMovies()方法上的第2条语句。请将我的帖子放在顶部。只需发送一份日志副本。SwipeListAdapter.java的第60行似乎有arrayoutofboundexception,我们可以看看吗?