如何更改recyclerview内容取决于类别微调器

时间:2017-05-25 11:10:13

标签: android android-recyclerview refresh spinner

我有一个从DB提供的Recyclerview,我有一个显示类别的微调器。 当微调器选定的项目发生变化时,我需要更改并刷新recyclerview内容。感谢您的帮助。

cardAdapter.java

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {

    private ImageLoader imageLoader;
    private Context context;
    List<Info_Details> superHeroes;

    public CardAdapter(List<Info_Details> superHeroes, Context context){
        super();
        this.superHeroes = superHeroes;
        this.context = context;
    }


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


    @Override
    public void onBindViewHolder(ViewHolder holder, final int position) {

        final Info_Details superHero =  superHeroes.get(position);


        imageLoader = CustomVolleyRequest.getInstance(context).getImageLoader();
        imageLoader.get(superHero.getImageUrl(), ImageLoader.getImageListener(holder.imageView, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert));

        holder.imageView.setImageUrl(superHero.getImageUrl(), imageLoader);
        holder.textViewCost.setText(superHero.getCost());
        holder.textViewCat.setText(superHero.getCat());


        holder.imageView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent intent=new Intent(context, DetailsActivity.class);
            intent.putExtra("image",superHeroes.get(position).getImageUrl().toString());
            intent.putExtra("cost",superHeroes.get(position).getCost().toString());
            intent.putExtra("cat",superHeroes.get(position).getCat().toString());
            intent.putExtra("desc",superHeroes.get(position).getDesc());
            context.startActivity(intent);

        }
    });
}

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


class ViewHolder extends RecyclerView.ViewHolder{

    public NetworkImageView imageView;
    public TextView textViewCost;
    public TextView textViewCat;

    public ViewHolder(View itemView) {
            super(itemView);
            imageView = (NetworkImageView) itemView.findViewById(R.id.imageViewHero);
            textViewCost = (TextView) itemView.findViewById(R.id.textViewName);
            textViewCat= (TextView) itemView.findViewById(R.id.textViewCreatedBy);

        }
    }
}

MainActivity.java

public class MainActivity_Second extends AppCompatActivity implements 
AdapterView.OnItemSelectedListener {

private Spinner catSpin2;
private String[] category2;
TextView nameShow, emailShow;
String get_url = "http://bode3.ir/app/get_info.php";
private List<Info_Details> listSuperHeroes;
private RecyclerView recyclerView;
private RecyclerView.LayoutManager layoutManager;
private RecyclerView.Adapter adapter;
private String selectedCategory;

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


    catSpin2 = (Spinner) findViewById(R.id.spinner435);
    category2 = getResources().getStringArray(R.array.catSelect);

    ArrayAdapter<String> adapter2 = new ArrayAdapter<String>(MainActivity_Second.this,
            android.R.layout.simple_dropdown_item_1line, category2);
    adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    catSpin2.setAdapter(adapter2);

    recyclerView = (RecyclerView) findViewById(R.id.card_recycler_view);
    recyclerView.setHasFixedSize(true);
    layoutManager = new LinearLayoutManager(this);
    recyclerView.setLayoutManager(layoutManager);

    listSuperHeroes = new ArrayList<>();

    catSpin2.setOnItemSelectedListener(this);

    getData();
}


private void getData() {

    final ProgressDialog loading = ProgressDialog.show(this, "Loading Data", "Please wait...", false, false);

    JsonArrayRequest jsonArrayRequest = new JsonArrayRequest(Request.Method.POST, get_url, null,
            new Response.Listener<JSONArray>() {
                @Override
                public void onResponse(JSONArray response) {

                    loading.dismiss();

                    parseData(response);
                }
            },
            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {

                }
            });


    RequestQueue requestQueue = Volley.newRequestQueue(this);

    requestQueue.add(jsonArrayRequest);
}

private void parseData(JSONArray array) {

        for (int i = 0; i < array.length(); i++) {

            Info_Details superHero = new Info_Details();
            JSONObject json = null;
            try {
                json = array.getJSONObject(i);
                superHero.setImageUrl(json.getString("Name"));
                superHero.setCost(json.getString("Cost"));
                superHero.setCat(json.getString("Cat"));


            } catch (JSONException e) {
                e.printStackTrace();
            }
            listSuperHeroes.add(superHero);
        }


    adapter = new CardAdapter(listSuperHeroes, this);

    recyclerView.setAdapter(adapter);

}

@Override
public void onBackPressed() {
    finish();
}

@Override
public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {

    switch (position) {
        case 0:
            selectedCategory = category2[position];
            Toast.makeText(MainActivity_Second.this, "selectedCat: " + selectedCategory, Toast.LENGTH_SHORT).show();
            break;
        case 1:
            selectedCategory = category2[position];
            Toast.makeText(MainActivity_Second.this, "selectedCat: " + selectedCategory, Toast.LENGTH_SHORT).show();
            break;
        case 2:
            selectedCategory = category2[position];
            Toast.makeText(MainActivity_Second.this, "selectedCat: " + selectedCategory, Toast.LENGTH_SHORT).show();
            break;
        case 3:
            selectedCategory = category2[position];
            Toast.makeText(MainActivity_Second.this, "selectedCat: " + selectedCategory, Toast.LENGTH_SHORT).show();
            break;
        case 4:
            selectedCategory = category2[position];
            Toast.makeText(MainActivity_Second.this, "selectedCat: " + selectedCategory, Toast.LENGTH_SHORT).show();
            break;
        case 5:
            selectedCategory = category2[position];
            Toast.makeText(MainActivity_Second.this, "selectedCat: " + selectedCategory, Toast.LENGTH_SHORT).show();
            break;
        case 6:
            selectedCategory = category2[position];
            Toast.makeText(MainActivity_Second.this, "selectedCat: " + selectedCategory, Toast.LENGTH_SHORT).show();
            break;

        }
    }

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

    }
}

activity_main.xml中

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorAccent"
tools:context=".MainActivity_Second">


<TextView
    android:id="@+id/textView435"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="انتخاب دسته بندی :"
    android:textColor="#fff"
    android:textSize="24sp"
    android:textStyle="bold" />

<Spinner
    android:id="@+id/spinner435"
    android:layout_width="match_parent"
    android:layout_height="30dp"
    android:layout_below="@+id/textView435"
    android:background="@android:color/background_light" />

<android.support.v7.widget.RecyclerView
    android:id="@+id/card_recycler_view"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_marginTop="10dp"
    android:scrollbars="vertical"
    android:layout_below="@+id/spinner435"/>
</RelativeLayout>

2 个答案:

答案 0 :(得分:0)

每次在微调器中选择一个项目时,您都可以清除superHeroes,并使用您要显示的数据填充它,并调用adapter.notifyDataSetChanged

答案 1 :(得分:0)

在CardAdapter.java

中设置过滤器
public void setFilter(List<Info_Details> newList) {
    superHeroes = new ArrayList<>();
    superHeroes.addAll(newList);
    notifyDataSetChanged();

}

然后在MainActivity中。为微调器选定项目中的每个更改创建新列表,并将新列表发送到CardAdapter通过调用过滤器方法。

private void setChange(String selectedCategory) {
    List<Info_Details> newList = new ArrayList<>();

    if (selectedCategory != "all") {
        for (Info_Details info : this.listSuperHeroes) {
            String cat = info.getCat();
            if (cat.contains(selectedCategory)) {
                newList.add(info);
            }
        }

        adapter.setFilter(newList);

    } else {
        for (Info_Details info : this.listSuperHeroes) {
                newList.add(info);
            }

        adapter.setFilter(newList);
    }
}