提问人:user8663248 提问时间:10/12/2023 最后编辑:user8663248 更新时间:10/14/2023 访问量:20
每当用户单击类别项时,都无法打开子类别列表
Not able to open a list of subcategory whenever user click on category item
问:
每当用户单击类别项目时,我都会尝试获取子类别,我正在使用 recyclerview 调用类别项目,并且我以 json 的形式从外部数据库获取所有数据。
1 目前,我在侧边栏中有两个不同的选项卡,如类别和子类别,这两个选项卡分别加载数据。
JSON 数据示例
Main category json data
[
{
"id": 1,
"category_name": "Maths",
"q_count": 1,
"category_image": "qcategory_Category test 1. dPy#NQHA7#PXwRG.png",
"sub_categorys": 2
},
{
"id": 2,
"category_name": "General knowledge",
"q_count": 2,
"category_image": "qcategory_Category test 2.png",
"sub_categorys": 2
}
]
sub category json
[
{
"id": 6,
"sub_category_name": "Arithmetic",
"sub_category_image": "subcategory_Applenull",
"category_id": 1,
"question": 0
},
{
"id": 7,
"sub_category_name": "Geometry",
"sub_category_image": "subcategory_Banananull",
"category_id": 1,
"question": 0
},
{
"id": 8,
"sub_category_name": "Gk Questions class 1",
"sub_category_image": "subcategory_Carrotnull",
"category_id": 2,
"question": 0
},
{
"id": 9,
"sub_category_name": "Gk Questions class 2",
"sub_category_image": "subcategory_Radishnull",
"category_id": 2,
"question": 0
}
]
数据编码
Main category
`public class Quiz_Category implements Serializable {
//public Long id;
public Long id;
public String category_name;
public String category_image;
public String q_count;
public String question;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getCategory_image() {
return category_image;
}
public void setCategory_image(String category_image) {
this.category_image = category_image;
}
public List<QuestionsPojo> question_list = new ArrayList<>();
}`
Subcategories data
`
public int id;
public String sub_category_name;
public String sub_category_image;
public Long category_id;
public String question;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getSub_Category_image() {
return sub_category_image;
}
public void setSub_Category_image(String sub_category_image) {
this.sub_category_image = sub_category_image;
}
`
我的类别 ADPTOR
public ViewHolder(View v) {
super(v);
category_name = (TextView) v.findViewById(R.id.txtcustomrow);
bellow_name = (TextView) v.findViewById(R.id.q_count);
category_image = (ImageView) v.findViewById(R.id.img);
lyt_parent = (CardView) v.findViewById(R.id.Ripple_layout);
}
}
public Filter getFilter() {
return mFilter;
}
// Provide a suitable constructor (depends on the kind of dataset)
public QuizAdapter(Context ctx, List<Quiz_Category> items) {
this.ctx = ctx;
original_items = items;
filtered_items = items;
categorylist = items;
ctx.getTheme().resolveAttribute(R.attr.selectableItemBackground, mTypedValue, true);
mBackground = mTypedValue.resourceId;
}
@Override
public QuizAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.quiz_list, parent, false);
v.setBackgroundResource(mBackground);
ViewHolder vh = new ViewHolder(v);
return vh;
}
// Replace the contents of a view (invoked by the layout manager)
@Override
public void onBindViewHolder(@NonNull ViewHolder holder,final int position) {
final Quiz_Category p = filtered_items.get(position);
//final Quiz_Category p = categorylist.get(position);
holder.category_name.setText(p.category_name);
imgloader.displayImage(Constant.getURLimgQuizCategory(p.category_image), holder.category_image);
holder.bellow_name.setText(p.question);
String url = DataManager.catphotourl+ categorylist.get(position).category_image;
try {
url = URLDecoder.decode(url, "UTF-8");
url = url.replaceAll(" ", "%20");
} catch (UnsupportedEncodingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//holder.category_image.setImage(url);
holder.lyt_parent.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent i = new Intent(ctx, ActivitySubCategoryDetails.class);
i.putExtra(ActivitySubCategoryDetails.EXTRA_OBJCT, p);
ctx.startActivity(i);
}
});
}
// Return the size of your dataset (invoked by the layout manager)
@Override
public int getItemCount() {
return categorylist != null ? categorylist.size() : 0;
//return filtered_items.size();
}
@Override
public long getItemId(int position) {
return filtered_items.get(position).id;
}
private class ItemFilter extends Filter {
@Override
protected FilterResults performFiltering(CharSequence constraint) {
String query = constraint.toString().toLowerCase();
FilterResults results = new FilterResults();
final List<Quiz_Category> list = original_items;
final List<Quiz_Category> result_list = new ArrayList<>(list.size());
for (int i = 0; i < list.size(); i++) {
String str_title = list.get(i).category_name;
if (str_title.toLowerCase().contains(query)) {
result_list.add(list.get(i));
}
}
results.values = result_list;
results.count = result_list.size();
return results;
}
目前我正在使用 FilterResults 来过滤子类别。
类别加载器
public class QuizListLoader extends AsyncTask<String, String, List<Quiz_Category>> {
String URL = Constant.getURLquizcategory();
private Gson gson = new Gson();
public interface TaskListener {
public void onFinished(List<Quiz_Category> result);
}
// This is the reference to the associated listener
private final TaskListener taskListener;
public QuizListLoader(TaskListener listener) {
this.taskListener = listener;
}
@Override
protected List<Quiz_Category> doInBackground(String... params) {
ArrayList<Quiz_Category> list = new ArrayList<Quiz_Category>();
Quiz_Category[] f = null;
try {
URL url = new URL(URL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
Gson gson = new Gson();
JsonReader reader = new JsonReader(new InputStreamReader(con.getInputStream()));
f = gson.fromJson(reader, Quiz_Category[].class);
for (Quiz_Category flower : f) {
list.add(flower);
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return list;
}
@Override
protected void onPostExecute(List<Quiz_Category> result) {
super.onPostExecute(result);
// In onPostExecute we check if the listener is valid
if (this.taskListener != null) {
this.taskListener.onFinished(result);
}
}
子类别加载器
public class SubCat_List_Loader extends AsyncTask<String, String, List<SubCategory>> {
String URL = Constant.getURLsubcategory();
private Gson gson = new Gson();
public interface TaskListener {
public void onFinished(List<SubCategory> result);
}
// This is the reference to the associated listener
private final TaskListener taskListener;
public SubCat_List_Loader(TaskListener listener) {
this.taskListener = listener;
}
@Override
protected List<SubCategory> doInBackground(String... params) {
ArrayList<SubCategory> list = new ArrayList<SubCategory>();
SubCategory[] f = null;
try {
URL url = new URL(URL);
HttpURLConnection con = (HttpURLConnection) url.openConnection();
Gson gson = new Gson();
JsonReader reader = new JsonReader(new InputStreamReader(con.getInputStream()));
f = gson.fromJson(reader, SubCategory[].class);
for (SubCategory flower : f) {
list.add(flower);
}
} catch (Exception e) {
e.printStackTrace();
return null;
}
return list;
}
@Override
protected void onPostExecute(List<SubCategory> result) {
super.onPostExecute(result);
// In onPostExecute we check if the listener is valid
if (this.taskListener != null) {
this.taskListener.onFinished(result);
}
}
每当用户单击类别时,我都会尝试在 Seprate RecyclerView 中打开子类别。所有子类别都有自己的category_id。
谢谢。
答: 暂无答案
评论