Note that there are some explanatory texts on larger screens.

plurals
  1. POUpdate ListView Record Duplicated Android
    primarykey
    data
    text
    <p>I put a limit of 15 records to be displayed in my listview. The 15 records successfully displayed but when i clicked on load more button, it add the previous 15 records and the new records too. Here is my async task where more records is being added. I use articlesAdapter.notifyDataSetChanged(); set too but the issue remains. i believe it has something to do with articlesFiltered.size()/15)+1.</p> <pre><code>public class ActusScreen extends BaseActivity implements OnClickListener { private DisplayImageOptions options; ImageLoader imageLoader; String link; //... final int NONE=0; final int THEME=1; final int SEARCH=2; final int THEME_TO_SEARCH=3; final int SEARCH_RESULTS=4; final int THEME_TO_SEARCH_RESULTS=5; int MODE=NONE; public ArrayList&lt;Article&gt; articles; public ArrayList&lt;Article&gt; articlesFiltered; public ArrayList&lt;Theme&gt; themes; public ArrayList&lt;Theme&gt; themeFiltered; public static int titleIndex=0; static boolean original_view = false; RelativeLayout adLayout; ListView themesList; RelativeLayout searchLayout; EditText searchField; Button back, theme; StringBuilder builder; ScrollView scrollme; ThemesAdapter themeAdapter; ArticlesAdapter articlesAdapter; TextView header_text; ActusScreen context; ProgressDialog pd; ImageView image_actus; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.actus); context=this; back=(Button)findViewById(R.id.envoye); back.setOnClickListener(this); back.setVisibility(View.GONE); theme=(Button)findViewById(R.id.theme); theme.setOnClickListener(this); Button search=(Button)findViewById(R.id.search); search.setOnClickListener(this); header_text = (TextView)findViewById(R.id.text_titre); header_text.setText(getResources().getText(R.string.actus).toString()); adLayout=(RelativeLayout)findViewById(R.id.adLayout); themeAdapter=new ThemesAdapter(this); themesList=(ListView)findViewById(R.id.themesList); themesList.setAdapter(themeAdapter); themesList.setVisibility(View.GONE); SelectedArticle.mtypo=1; articlesAdapter=new ArticlesAdapter(this); ListView articlesList=(ListView)findViewById(R.id.articlesList); articlesList.setAdapter(articlesAdapter); searchLayout=(RelativeLayout)findViewById(R.id.searchLayout); searchLayout.setVisibility(View.GONE); searchField=(EditText)findViewById(R.id.keyword); Button valid=(Button)findViewById(R.id.valid); valid.setOnClickListener(this); new GetAllArticlesTask().execute(); image_actus = (ImageView)findViewById(R.id.image); image_actus.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub String url = link; Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(url)); startActivity(i); } }); options = new DisplayImageOptions.Builder() // .showStubImage(R.drawable.ic_launcher) .displayer(new RoundedBitmapDisplayer(3)) .cacheInMemory() .cacheOnDisc() .build(); imageLoader = ImageLoader.getInstance(); imageLoader.init(ImageLoaderConfiguration.createDefault(getApplicationContext())); new backTask().execute(""); } @Override protected void onStart() { // TODO Auto-generated method stub //FavoriteScreen.flagx=1; super.onStart(); } @Override public void onClick(View v) { switch(v.getId()){ case R.id.envoye: back(); break; case R.id.theme: if(themesList.getVisibility()==View.VISIBLE) themesList.setVisibility(View.GONE); else themesList.setVisibility(View.VISIBLE); break; case R.id.search: search(); break; case R.id.valid: searchLayout.setVisibility(View.GONE); if(MODE==SEARCH) MODE=SEARCH_RESULTS; else MODE=THEME_TO_SEARCH_RESULTS; filterArticles(); break; } } public void search(){ switch(MODE){ case SEARCH_RESULTS: searchLayout.setVisibility(View.VISIBLE); MODE=SEARCH; break; case THEME_TO_SEARCH_RESULTS: searchLayout.setVisibility(View.VISIBLE); MODE=THEME_TO_SEARCH; break; case THEME: searchLayout.setVisibility(View.VISIBLE); MODE=THEME_TO_SEARCH; break; case NONE: searchLayout.setVisibility(View.VISIBLE); back.setVisibility(View.VISIBLE); theme.setVisibility(View.GONE); MODE=SEARCH; break; } } public void back(){ switch(MODE){ case SEARCH_RESULTS: searchLayout.setVisibility(View.VISIBLE); MODE=SEARCH; break; case THEME_TO_SEARCH_RESULTS: searchLayout.setVisibility(View.VISIBLE); MODE=THEME_TO_SEARCH; break; case THEME: back.setVisibility(View.GONE); theme.setVisibility(View.VISIBLE); /* * Intent intent = getIntent(); finish(); startActivity(intent); */ articlesAdapter=new ArticlesAdapter(this); ListView articlesList=(ListView)findViewById(R.id.articlesList); articlesList.setAdapter(articlesAdapter); //ActusScreen.titleIndex=0; ArticlesAdapter.mode = true; titleIndex=0; new GetAllArticlesTask().execute(); header_text.setText(getResources().getText(R.string.actus).toString()); MODE=NONE; break; case SEARCH: searchLayout.setVisibility(View.GONE); back.setVisibility(View.GONE); theme.setVisibility(View.VISIBLE); MODE=NONE; copyArticles(); articlesAdapter.notifyDataSetChanged(); break; case THEME_TO_SEARCH: searchLayout.setVisibility(View.GONE); MODE=THEME; copyArticles(); articlesAdapter.notifyDataSetChanged(); break; } } private void copyArticles() { if(articles!=null){ if(articlesFiltered==null) articlesFiltered=new ArrayList&lt;Article&gt;(); else articlesFiltered.clear(); for(Article a: articles) articlesFiltered.add(a); } } public void filterArticles(){ String key=searchField.getText().toString().toLowerCase(); if(key.length()&gt;0){ if(articlesFiltered!=null){ articlesFiltered.clear(); System.gc(); } for(Article a: articles){ if(a.name.toLowerCase().contains(key)) articlesFiltered.add(a); } articlesAdapter.notifyDataSetChanged(); } } private class GetAllArticlesTask extends AsyncTask&lt;Void, Void, Void&gt; { @Override public Void doInBackground(Void... params) { if(Globals.themes==null) Globals.themes=HTTPFunctions.getThemesList(); if(articles!=null){ articles.clear(); System.gc(); } articles=HTTPFunctions.getAllArticles(); copyArticles(); return null; } @Override public void onPreExecute() { pd = ProgressDialog.show(context, "", context.getResources().getString(R.string.loading), true, false); } @Override public void onPostExecute(Void result) { pd.dismiss(); articlesAdapter.notifyDataSetChanged(); themeAdapter.notifyDataSetChanged(); } } private class GetThemeArticlesTask extends AsyncTask&lt;String, Void, Void&gt; { @Override public Void doInBackground(String... params) { if(articles!=null){ articles.clear(); System.gc(); } articles=HTTPFunctions.getThemeArticles(params[0]); //begin 06/03; articles.theme_id not set by HTTPFunctions when a specific theme is selected; need to set it explicitly for (Article a : articles) a.theme_id=params[0]; //end System.out.println("theme article: "+ HTTPFunctions.getThemeArticles(params[0])); copyArticles(); return null; } @Override public void onPreExecute() { pd = ProgressDialog.show(context, "", context.getResources().getString(R.string.loading), true, false); } @Override public void onPostExecute(Void result) { pd.dismiss(); articlesAdapter.notifyDataSetChanged(); } } private class GetMoreArticlesTask extends AsyncTask&lt;Void, Void, Void&gt; { @Override public Void doInBackground(Void... params) { ArrayList&lt;Article&gt;moreArticles=HTTPFunctions.getMoreArticles(addOne((articlesFiltered.size()/15))); if(moreArticles!=null){ articles.addAll(articles); copyArticles(); } return null; } @Override public void onPreExecute() { pd = ProgressDialog.show(context, "", context.getResources().getString(R.string.loading), true, false); } @Override public void onPostExecute(Void result) { pd.dismiss(); articlesAdapter.notifyDataSetChanged(); } } public void articleSelected(int id){ Globals.copyArticles(articlesFiltered); Intent i=new Intent(context, SelectedArticle.class); i.putExtra("id", id); //begin //i.putExtra("title", ArticlesAdapter.selected); if (titleIndex==0){ String title=Util.getTitleName(articlesFiltered.get(id).type, articlesFiltered.get(id).theme_id); i.putExtra("title", title); } else{ String title=ArticlesAdapter.selected.toUpperCase(); i.putExtra("title", title); } //end context.startActivity(i); } public void themeSelected(int id){ themesList.setVisibility(View.GONE); MODE=THEME; theme.setVisibility(View.GONE); back.setVisibility(View.VISIBLE); ArticlesAdapter.mode = false; //begin 06/03 //ArticlesAdapter.selected=Globals.themes.get(id).name; //header_text.setText(Globals.themes.get(id).name.toUpperCase()); Spanned name=Html.fromHtml(Globals.themes.get(id).name); System.out.println("spanned name: "+ name); ArticlesAdapter.selected=name.toString().toUpperCase(); header_text.setText(name.toString().toUpperCase()); //end System.out.println("theme_name: "+ Globals.themes.get(id).name); new GetThemeArticlesTask().execute(Globals.themes.get(id).id); } public void loadMore(){ new GetMoreArticlesTask().execute(); } @Override protected void onResume() { // TODO Auto-generated method stub if (original_view==true){ new GetAllArticlesTask().execute(); theme.setVisibility(View.VISIBLE); back.setVisibility(View.GONE); header_text.setText(getResources().getText(R.string.actus).toString()); original_view=false; } super.onResume(); } @Override protected void onPause() { // TODO Auto-generated method stub SelectedReglementation.setview=true; super.onPause(); } class backTask extends AsyncTask&lt;String, Void, ArrayList&lt;Post&gt;&gt; { @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); } @Override protected ArrayList&lt;Post&gt; doInBackground(String... urls) { ArrayList&lt;Post&gt; newpostarraylist=new ArrayList&lt;Post&gt;(); try{ URL url = new URL(""); BufferedReader reader = null; builder = new StringBuilder(); try { reader = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8")); for (String line; (line = reader.readLine()) != null;) { builder.append(line.trim()); } } finally { if (reader != null) try { reader.close(); } catch (IOException logOrIgnore) {} } System.out.println("Builder: "+ builder); }catch(Exception ex){} return newpostarraylist; } @Override protected void onPostExecute(ArrayList&lt;Post&gt; result) { String[] banner_image = builder.toString().split(";"); imageLoader.displayImage(banner_image[2], image_actus,options); link = banner_image[1]; } } public int addOne(int i){ return i+1; } } </code></pre> <p>and My article adapter</p> <pre><code>public class ArticlesAdapter extends BaseAdapter { ActusScreen main; ImageLoader imageLoader; String imageUrl=""; public static String selected=""; public static boolean mode=false; int x=0; //disable a.theme_id null pointer wh public static int bine=0; public ArticlesAdapter(ActusScreen m) { main=m; imageLoader=new ImageLoader(m); } public int getCount() { if(main.articlesFiltered!=null) return main.articlesFiltered.size(); return 0; } public Object getItem(int position) { return null; } public long getItemId(int position) { return 0; } public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder holder; if (convertView==null) { convertView=newView(position, parent); holder = new ViewHolder(); holder.image=(ImageView)convertView.findViewById(R.id.image); holder.remove=(ImageView)convertView.findViewById(R.id.remove); holder.title=(TextView)convertView.findViewById(R.id.title); holder.text_title=(TextView)convertView.findViewById(R.id.text_title); holder.more=(RelativeLayout)convertView.findViewById(R.id.moreLayout); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } Article a=main.articlesFiltered.get(position); imageLoader.DisplayImage(String.format(imageUrl, a.image), holder.image); String str = a.name; int length = str.length(); String newStr = a.name; if (length&gt;65) newStr = str.replaceAll("^(.{74})(.*)$","$1..."); holder.title.setText(Html.fromHtml(newStr)); holder.text_title.setText(selected.toUpperCase()); holder.remove.setVisibility(View.GONE); if (holder.text_title.equals(null)) holder.text_title.setText("t"); if(position==main.articlesFiltered.size()-1 &amp;&amp; main.articlesFiltered.size()&lt;=45 &amp;&amp; main.articlesFiltered.size()%15==0) holder.more.setVisibility(View.VISIBLE); else holder.more.setVisibility(View.GONE); convertView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { main.articleSelected(position); SelectedArticle.mtypo=1; } }); holder.more.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { main.loadMore(); } }); if (ActusScreen.titleIndex==0){ ... } } return(convertView); } private View newView(int position, ViewGroup parent) { return(main.getLayoutInflater().inflate(R.layout.articles_row, parent, false)); } class ViewHolder { ImageView image, remove; TextView title; TextView text_title; RelativeLayout more; } } </code></pre> <p><strong>UPDATE and the HttpFunction getMoreArticles()</strong></p> <pre><code>public static ArrayList&lt;Article&gt; getMoreArticles(int page){ String url=LAST_ARTICLE_URL; if(url.endsWith(".php")) url+="?page="+page; else url+="&amp;page="+page; String response=getResponse(url); if(!ERROR.equals(response)){ return JsonParsingFunctions.parseArticles(response); } return null; } </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload