2017-05-21 2 views
0

Ich versuche, meine Suche Ergebnis in Recyclerview löschen, wenn ich nach neuen Wörtern aus mysql Datenbank suchen. Das Problem ist, dass wenn ich nach neuen Wörtern suche, aber fügt neue Suchergebnisse zu meiner vorherigen Suche Einsen. Ich habe eine EditText und eine Bildansicht, die als Taste und einen recyclerview arbeitetlöschen Vergangenheit Suchergebnis in Recyclerview

//Activity_search.java 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.view.View; 
import android.widget.EditText; 
import android.widget.ImageView; 

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 

import java.util.ArrayList; 

public class Activity_Search extends AppCompatActivity { 
    public static String data = ""; 

    RecycleNewsAdapter recycleNewsAdapter; 

    LinearLayoutManager manager; 
    RecyclerView recyclenews; 

    ImageView imgsearch; 
    EditText txtsearch; 

    ArrayList<recycleinfo> recylerinfos; 
    ArrayList<String>recycleTitle ; 
    ArrayList<String> recycleimg; 
    ArrayList<String> recycleId; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity__search); 
     // Toast.makeText(Activity_AfNews.this,afgnews, Toast.LENGTH_SHORT).show(); 

     recycleNewsAdapter = new RecycleNewsAdapter(recylerinfos); 
     recycleimg = new ArrayList<>(); 
     recycleTitle = new ArrayList<>(); 
     recycleId = new ArrayList<>(); 
     recylerinfos = new ArrayList<>(); 

     recyclenews = (RecyclerView) findViewById(R.id.searchRecycle); 
     manager = new LinearLayoutManager(this); 
     recyclenews.setHasFixedSize(true); 
     recyclenews.setLayoutManager(manager); 
     recyclenews.setNestedScrollingEnabled(false); 

     imgsearch = (ImageView) findViewById(R.id.imgsearch); 
     txtsearch = (EditText) findViewById(R.id.txtsearch); 

     imgsearch.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       String text = txtsearch.getText().toString(); 
       if (!txtsearch.getText().toString().equals("")){ 
       new AsyncTaskSearch("http://192.198.1.100/search.php",text).execute(); 
       try { 
        JSONObject jsonObject=new JSONObject(data); 
        JSONArray jsonTitleaf=jsonObject.getJSONArray("title"); 
         JSONArray jsonPicaf=jsonObject.getJSONArray("pics"); 
         JSONArray jsonId=jsonObject.getJSONArray("id"); 

          for (int i=0;i<jsonTitleaf.length();i++){ 
         recycleimg.add(jsonPicaf.getString(i)); 
         recycleTitle.add(jsonTitleaf.getString(i)); 
         recycleId.add(jsonId.getString(i)); 
        } 
        for (int i=0;i<recycleTitle.size();i++){ 
         recycleinfo recycleinfo = new recycleinfo(); 
         recycleinfo.title = recycleTitle.get(i); 
         recycleinfo.img = recycleimg.get(i); 
         recycleinfo.Id = recycleId.get(i); 
         recylerinfos.add(recycleinfo); 
        }recycleNewsAdapter.notifyDataSetChanged(); 
        recyclenews.setAdapter(new RecycleNewsAdapter(recylerinfos)); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 

      } 
     }); 
    } 
} 




//RecyclerNewsAdoptor.java 

public class RecycleNewsAdapter extends RecyclerView.Adapter<viewholder>{ 

    ArrayList<recycleinfo> recycleinfos = new ArrayList<>(); 
    public RecycleNewsAdapter(ArrayList<recycleinfo> recycleinfos){ 
     this.recycleinfos=recycleinfos; 
    } 
    @Override 
    public viewholder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.recyclernews, parent, false); 
     return new viewholder(view); 
    } 
    @Override 
    public void onBindViewHolder(viewholder holder, int position) { 
     recycleinfo recycleinfo = recycleinfos.get(position); 
     holder.title.setText(recycleinfo.title); 
     holder.Id = recycleinfo.Id; 
     Picasso.with(G.context).load("http://afghanistanema.com/"+recycleinfo.img).into(holder.img); 
    // Picasso.with(G.context).load("http://afghanistanema.com/"+recycleinfo.img).into(holder.img); 
    } 
    @Override 
    public int getItemCount() { 
     return recycleinfos.size(); 
    } 
} 

class viewholder extends RecyclerView.ViewHolder{ 

    public ImageView img; 
    public TextView title; 
    public TextView date; 
    public String Id=""; 
    public LinearLayout linearLayout; 
    public viewholder(View itemView) { 
     super(itemView); 
     img = (ImageView) itemView.findViewById(R.id.img); 
     date = (TextView) itemView.findViewById(R.id.date); 
     title = (TextView) itemView.findViewById(R.id.title); 
     linearLayout = (LinearLayout) itemView.findViewById(R.id.linearNews); 
     linearLayout.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       Intent intent = new Intent(G.context, ActivityWait_full_Text.class); 
       intent.putExtra("id", Id); 
       intent.addFlags(intent.FLAG_ACTIVITY_NEW_TASK); 
       G.context.startActivity(intent); 
    // Toast.makeText(G.context,Id+"", Toast.LENGTH_SHORT).show(); 

      } 
     }); 
    } 
} 




//recycleinfo.java 


public class recycleinfo { 
    public String img; 
    public String title; 
    public String Id; 
    public String date; 


} 
+0

In Ihrem onclick tun "recylerinfos = new ArrayList <>();". –

+0

"Es ist immer noch nicht mein Problem zu lösen" - @ Muditsen1234 – mahdi

Antwort

0

Dank für Ihre Antwort friends.i konnte mein Problem mit dem Hinzufügen von ein paar einfache Codes meiner onclick.i nur klar alle meine Arraylist in Onclick und es gelöst lösen.

    recycleimg.clear(); 
       recycleId.clear(); 
       recycleTitle.clear(); 
       recylerinfos.clear(); 
0

Wenn der Benutzer die Suchtaste nur clear() die ArrayList klicken und RecyclerAdapter aktualisieren. dies wie:

recycleinfo.clear(); 
recycleNewsAdapter.notifyDataSetChanged(); 

Es ist wichtig, dass Sie Klar Ihre ArrayList stattdessen ein New schaffen ein, weil RecyclerAdapter Bezug auf ArrayList ist weg, wenn Sie einen neuen erstellen ..

+0

ich nicht Nötig, wo ist mein Problem.I tat, wie Sie gesagt @Keivan Esbati – mahdi

0

hinzufügen recylerinfos.clear(); wie unten gezeigt.

imgsearch.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      recylerinfos.clear();  // adding this line will clear the old search results. 
      String text = txtsearch.getText().toString(); 
      if (!txtsearch.getText().toString().equals("")){ 
      new AsyncTaskSearch("http://192.198.1.100/search.php",text).execute(); 
      try { 
       JSONObject jsonObject=new JSONObject(data); 
       JSONArray jsonTitleaf=jsonObject.getJSONArray("title"); 
        JSONArray jsonPicaf=jsonObject.getJSONArray("pics"); 
        JSONArray jsonId=jsonObject.getJSONArray("id"); 

         for (int i=0;i<jsonTitleaf.length();i++){ 
        recycleimg.add(jsonPicaf.getString(i)); 
        recycleTitle.add(jsonTitleaf.getString(i)); 
        recycleId.add(jsonId.getString(i)); 
       } 
       for (int i=0;i<recycleTitle.size();i++){ 
        recycleinfo recycleinfo = new recycleinfo(); 
        recycleinfo.title = recycleTitle.get(i); 
        recycleinfo.img = recycleimg.get(i); 
        recycleinfo.Id = recycleId.get(i); 
        recylerinfos.add(recycleinfo); 
       }recycleNewsAdapter.notifyDataSetChanged(); 
       recyclenews.setAdapter(new RecycleNewsAdapter(recylerinfos)); 
      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 
     } 

     } 
    }); 
} 
+0

es funktioniert noch nicht.Ich addiere recycleinfos.clear(); recycleNewsAdapter.notifyDataSetChanged(); in meinem Onclick aber nichts geändert noch – mahdi

+0

können Sie versuchen recyclenews.setAdapter (null); nach den Zeilen im Onclick-Event. –

+0

funktioniert noch nicht @RohitPadma – mahdi