我有一个从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>
答案 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);
}
}