-3

Ich versuche, alle Daten aus Recyclerview zu entfernen, wenn ich ein Element aus Spinner auswählen. Ich möchte unterschiedliche Daten in jedem Spinner Element Auswahl anzeigen. Obwohl Daten angezeigt werden, aber es an die vorherigen Spinner Auswahldaten angehängt wird . Ich möchte, dass der Recyclerview-Adapter gelöscht wird und neue Daten in die Spinner-Auswahl geladen werden. Kann mir bitte jemand helfen, das Problem zu beheben. hier ist mein CodeRecyclerview Daten Löschen

MainActivity

public class MainActivity extends AppCompatActivity { 
    Spinner spinner1; 
    RecyclerView recyclerView1; 
    private String spinnerValues[]; 
    private ProgressDialog pdlog; 
    public RecyclerDataAdapter adapter; 
    ArrayList<ProductModel> productDetails; 
    String url="aaa=1"; 
    ProductModel pm; 

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

     recyclerView1=(RecyclerView)findViewById(R.id.recyclerView1); 
     RecyclerView.LayoutManager mLayoutmanager=new GridLayoutManager(getApplicationContext(),2); 
     recyclerView1.setLayoutManager(mLayoutmanager); 


adapter=new RecyclerDataAdapter(); 
productDetails=new ArrayList<ProductModel>(); 
     spinner1=(Spinner)findViewById(R.id.spinner1); 
     spinner1.getBackground().setColorFilter(Color.parseColor("#d62041"), PorterDuff.Mode.SRC_ATOP); 
     spinnerValues=new String[]{"a","b","c","d","e","f"}; 
     final ArrayAdapter<String>adapter=new ArrayAdapter<String>(this,R.layout.spinner_style,spinnerValues); 
     adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
     spinner1.setAdapter(adapter); 
spinner1.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 
     String selectedValue=spinner1.getSelectedItem().toString().replaceAll("\\s+","").toUpperCase(); 
     Toast.makeText(getApplicationContext(),"selected : "+selectedValue,Toast.LENGTH_SHORT).show(); 
     if(selectedValue.equals("a")){ 
      url="aaa=1";} 

     if(selectedValue.equals("b")){ 

      url="aaa=2";} 
     if(selectedValue.equals("c")){ 

      url="aaa=3";} 
     if(selectedValue.equals("d")){ 

      url="aaa=4";} 
     if(selectedValue.equals("e")){ 

      url="aaa=5";} 
     if(selectedValue.equals("f")){ 

      url="aaa=6";} 

     Toast.makeText(getApplicationContext(),url,Toast.LENGTH_SHORT).show(); 
     new FetchDetails().execute(); 

    } 



    @Override 
    public void onNothingSelected(AdapterView<?> adapterView) { 

    } 
}); 
    } 


    class FetchDetails extends AsyncTask<String,String,String> 
    { 
     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 

      pdlog=new ProgressDialog(MainActivity.this); 
      pdlog.setMessage("Loading"); 
      pdlog.setCancelable(false); 
      pdlog.show(); 
     } 

     @Override 
     protected String doInBackground(String... strings) { 
      pm=null; 

      HttpHandler h=new HttpHandler(); 
      String jsonString=h.makeServiceCall(url); 
      if(jsonString!=null){ 
       try{ 
        JSONArray imageArray=new JSONArray(jsonString); 
        for(int i=0;i<imageArray.length();i++){ 
         JSONObject jsonData=imageArray.getJSONObject(i); 
         pm=new ProductModel(); 

         pm.pro_id=Integer.parseInt(jsonData.getString("pro_id")); 
         pm.pro_name=jsonData.getString("pro_name"); 
         pm.pro_image=jsonData.getString("pro_image"); 

         productDetails.add(pm); 

         System.out.println("***************************************************"); 
         System.out.println("(MainActivity)product name: "+jsonData.getString("pro_name")+"\n"); 
         System.out.println("(MainActivity)pro url : "+jsonData.getString("pro_image")); 
         System.out.println("***************************************************"); 

         adapter=new RecyclerDataAdapter(getApplicationContext(),productDetails); 

        } 
       }catch (Exception e){ 
        e.printStackTrace(); 
       } 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String s) { 
      super.onPostExecute(s); 
      if(pdlog.isShowing()) 
       pdlog.dismiss(); 

      recyclerView1.setAdapter(adapter); 

     } 

    } 



} 

RecyclerDataAdapter

public class RecyclerDataAdapter extends RecyclerView.Adapter<RecyclerDataAdapter.ViewHolder> { 
public ArrayList<ProductModel>productDetails; 
public Context context1; 



public RecyclerDataAdapter(){ 

} 

public RecyclerDataAdapter(Context context, ArrayList<ProductModel> getproductDetails){ 
    this.context1=context; 
    this.productDetails=getproductDetails; 

    System.out.println("********************** inside adapter class constructor *************************"); 
    for(int i=0;i<productDetails.size();i++){ 
     System.out.println("/////////////////////// product name : "+productDetails.get(i).pro_name); 
     System.out.println("/////////////////////// image url : "+productDetails.get(i).pro_image); 
    } 
} 



@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.row,parent,false); 
    return new ViewHolder(view); 
} 


@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.product_id.setText(Integer.toString(productDetails.get(position).getPro_id())); 
    holder.product_name.setText(productDetails.get(position).getPro_name()); 
    Picasso.with(context1) 
      .load(productDetails.get(position).pro_image) 
      .fit() 
      .into(holder.imageview1); 
} 




@Override 
public int getItemCount() { 
    return productDetails.size(); 
} 

public class ViewHolder extends RecyclerView.ViewHolder{ 

    public TextView product_id,product_name; 
    public ImageView imageview1; 

    public ViewHolder(View itemView) { 
     super(itemView); 
     imageview1=(ImageView)itemView.findViewById(R.id.imageView1); 
     product_id=(TextView)itemView.findViewById(R.id.product_id); 
     product_name=(TextView)itemView.findViewById(R.id.product_name); 



    } 
} 

}

Antwort

1

Sie eine Sache tun können, dass Sie eine Arraylist haben muss (ich verwendet habe, List Name dafür) von whi ch die Daten werden in der RecyclerView angezeigt. Kopieren Sie also zunächst alle Daten daraus in das neue mainarrayList, und wann immer Sie neue Daten für den Spinner festlegen müssen, verwenden Sie zunächst die Methode: List.clear() und kopieren Sie die erforderlichen Daten von mainArrayList zu diesem List und zeigen Sie es in recyclerView an.

Ich habe es bei der Verwendung von Such-Konzept in einer RecyclerView, die das gleiche Konzept wie Sie gefragt hat getan.

Hoffe diese Hilfe!

+0

Danke Swr7der..es funktioniert jetzt. – c0der

+0

Mein Vergnügen :) Happy coding @Anvi – Swr7der

Verwandte Themen