2016-12-05 319 views
-3

我想,當我選擇spinner.I的項目需要不同的數據在每個微調項selection.Although DATAS顯示正在顯示刪除從Recyclerview所有的數據,但它被附加到以前的微調選擇數據。 我想讓recyclerview適配器得到清除,並在微調器選擇上加載新數據。有人可以幫我解決這個問題。 這裏是我的代碼Recyclerview數據清除

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); 



    } 
} 

}

回答

1

你可以做一件事,你必須有一個ArrayList的(我用List這個名字)來自whi ch數據顯示在recyclerView中。所以,最初從它的所有數據複製到新mainarrayList,每當你需要爲微調器設置新的數據,只要使用方法:List.clear()最初從mainArrayList所需要的數據複製到該List,並顯示在recyclerView。

我已經在有你同問道概念recyclerView使用搜索的概念做到了。

希望得到這個幫助!

+0

謝謝Swr7der..it現在可以工作。 – c0der

+0

我的榮幸:)快樂編碼@Avii – Swr7der