Невозможно открыть список подкатегорий всякий раз, когда пользователь нажимает на элемент категории. ⇐ Android
Невозможно открыть список подкатегорий всякий раз, когда пользователь нажимает на элемент категории.
я пытаюсь получить подкатегории всякий раз, когда пользователь нажимает на элемент категории, я использую recyclerview для вызова элементов категории и получаю все данные из внешней базы данных в форме JSON.
1 В настоящее время у меня есть две разные вкладки на боковой панели, такие как категории и подкатегории, обе вкладки загружают данные отдельно.
Пример данных в формате JSON
JSON-данные основной категории [ { "идентификатор": 1, "category_name": "Математика", "q_count": 1, "category_image": "qcategory_Category тест 1. dPy#NQHA7#PXwRG.png", "под_категории": 2 }, { «идентификатор»: 2, "category_name": "Общие знания", "q_count": 2, "category_image": "qcategory_Category test 2.png", "под_категории": 2 } ] подкатегория JSON [ { "идентификатор": 6, "sub_category_name": "Арифметика", "sub_category_image": "subcategory_Applenull", «идентификатор_категории»: 1, "вопрос": 0 }, { "идентификатор": 7, "sub_category_name": "Геометрия", "sub_category_image": "subcategory_Banananull", «идентификатор_категории»: 1, "вопрос": 0 }, { "идентификатор": 8, "sub_category_name": "Вопросы Gk, класс 1", "sub_category_image": "subcategory_Carrotnull", «идентификатор_категории»: 2, "вопрос": 0 }, { "идентификатор": 9, "sub_category_name": "Вопросы Gk, класс 2", "sub_category_image": "subcategory_Radishnull", «идентификатор_категории»: 2, "вопрос": 0 } ] Код создания данных
Основная категория `публичный класс Quiz_Category реализует Serializable { //публичный длинный идентификатор; общедоступный длинный идентификатор; общедоступная строка имя_категории; общедоступная строка Category_image; общедоступная строка q_count; публичный строковый вопрос; общественный длинный getId() { вернуть идентификатор; } общественный недействительный setId (длинный идентификатор) { this.id = идентификатор; } публичная строка getCategory_image() { вернуть категорию_изображение; } public void setCategory_image (String Category_image) { this.category_image = Category_image; } public List questions_list = новый ArrayList(); }` Данные подкатегорий ` общедоступный внутренний идентификатор; общедоступная строка sub_category_name; общедоступная строка sub_category_image; общественный Длинный Category_id; публичный строковый вопрос; общественный int getId() { вернуть идентификатор; } общественный недействительный setId (int id) { this.id = идентификатор; } публичная строка getSub_Category_image() { вернуть sub_category_image; } public void setSub_Category_image (String sub_category_image) { this.sub_category_image = sub_category_image; } ` Администратор моей категории
public ViewHolder(View v) { супер (в); имя_категории = (TextView) v.findViewById(R.id.txtcustomrow); below_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); } } публичный фильтр getFilter() { вернуть мФильтер; } // Предоставляем подходящий конструктор (зависит от типа набора данных) public QuizAdapter (Context ctx, List items) { this.ctx = ctx; original_items = предметы; filtered_items = элементы; список категорий = элементы; ctx.getTheme().resolveAttribute(R.attr.selectableItemBackground, mTypedValue, true); mBackground = mTypedValue.resourceId; } @Override public QuizAdapter.ViewHolder onCreateViewHolder (родитель ViewGroup, int viewType) { Представление v = LayoutInflater.from(parent.getContext()).inflate(R.layout.quiz_list, родительский, false); v.setBackgroundResource(mBackground); ViewHolder vh = новый ViewHolder (v); вернуть вх; } // Заменяем содержимое представления (вызываемого менеджером макета) @Override public void onBindViewHolder(@NonNull ViewHolder Holder,final int Position) { окончательная Quiz_Category p = filtered_items.get(позиция); //финальная 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); Строковый URL = DataManager.catphotourl+ Categorylist.get(position).category_image; пытаться { url = URLDecoder.decode(url, "UTF-8"); URL = url.replaceAll(" ", "%20"); } catch (UnsupportedEncodingException e1) { // TODO Автоматически сгенерированный блок catch e1.printStackTrace(); } //holder.category_image.setImage(url); Holder.lyt_parent.setOnClickListener(новый View.OnClickListener() { @Override public void onClick (Просмотр) { Намерение я = новое намерение (ctx, ActivitySubCategoryDetails.class); i.putExtra(ActivitySubCategoryDetails.EXTRA_OBJCT, p); ctx.startActivity(я); } }); } // Возвращаем размер вашего набора данных (вызываемого менеджером компоновки) @Override общественный ИНТ getItemCount () { вернуть список категорий!= ноль? список категорий.размер(): 0; //возвращаем filtered_items.size(); } @Override public long getItemId (int Position) { return filtered_items.get(position).id; } частный класс ItemFilter расширяет фильтр { @Override protected FilterResults PerformFiltering (ограничение CharSequence) { Строковый запрос = ограничение.toString().toLowerCase(); Результаты FilterResults = новый FilterResults(); окончательный список list = original_items; окончательный список result_list = новый ArrayList(list.size()); for (int i = 0; i < list.size(); i++) { Строка str_title = list.get(i).category_name; если (str_title.toLowerCase().contains(query)) { result_list.add(list.get(i)); } } результаты.значения = список_результатов; results.count = result_list.size(); возврат результатов; } в настоящее время я использую FilterResults для фильтрации подкатегорий.
Загрузчик категорий
публичный класс QuizListLoader расширяет AsyncTask { Строковый URL = Constant.getURLquizcategory(); частный Gson gson = новый Gson(); общедоступный интерфейс TaskListener { public void onFinished (результат List); } // Это ссылка на связанный прослушиватель частный окончательный TaskListener TaskListener; public QuizListLoader (прослушиватель TaskListener) { this.taskListener = слушатель; } @Override protected List doInBackground(String... params) { Список ArrayList = новый ArrayList(); Quiz_Category[] f = null; пытаться { URL-адрес = новый URL-адрес (URL); HttpURLConnection con = (HttpURLConnection) url.openConnection(); Gson gson = новый Gson(); Читатель JsonReader = новый JsonReader(новый InputStreamReader(con.getInputStream())); f = gson.fromJson(читатель, Quiz_Category[].class); for (Quiz_Category цветок: f) { list.add(цветок); } } catch (Исключение е) { е.printStackTrace(); вернуть ноль; } список возврата; } @Override protected void onPostExecute (результат List) { super.onPostExecute(результат); // В onPostExecute мы проверяем, действителен ли прослушиватель если (this.taskListener != null) { this.taskListener.onFinished(результат); } } Загрузчик подкатегорий
публичный класс SubCat_List_Loader расширяет AsyncTask { Строковый URL = Constant.getURLsubcategory(); частный Gson gson = новый Gson(); общедоступный интерфейс TaskListener { public void onFinished (результат List); } // Это ссылка на связанный прослушиватель частный окончательный TaskListener TaskListener; public SubCat_List_Loader (прослушиватель TaskListener) { this.taskListener = слушатель; } @Override защищенный список doInBackground(String... параметры) { Список ArrayList = новый ArrayList(); Подкатегория [] е = ноль; пытаться { URL-адрес = новый URL-адрес (URL); HttpURLConnection con = (HttpURLConnection) url.openConnection(); Gson gson = новый Gson(); Читатель JsonReader = новый JsonReader(новый InputStreamReader(con.getInputStream())); f = gson.fromJson(читатель, SubCategory[].class); for (Подкатегория цветок: f) { list.add(цветок); } } catch (Исключение е) { е.printStackTrace(); вернуть ноль; } список возврата; } @Override protected void onPostExecute (результат List) { super.onPostExecute(результат); // В onPostExecute мы проверяем, действителен ли прослушиватель если (this.taskListener != null) { this.taskListener.onFinished(результат); } } Я пытаюсь открыть подкатегории в отдельном просмотре recyclerview каждый раз, когда пользователь нажимает на категорию. Все подкатегории имеют собственный Category_id.
спасибо.
я пытаюсь получить подкатегории всякий раз, когда пользователь нажимает на элемент категории, я использую recyclerview для вызова элементов категории и получаю все данные из внешней базы данных в форме JSON.
1 В настоящее время у меня есть две разные вкладки на боковой панели, такие как категории и подкатегории, обе вкладки загружают данные отдельно.
Пример данных в формате JSON
JSON-данные основной категории [ { "идентификатор": 1, "category_name": "Математика", "q_count": 1, "category_image": "qcategory_Category тест 1. dPy#NQHA7#PXwRG.png", "под_категории": 2 }, { «идентификатор»: 2, "category_name": "Общие знания", "q_count": 2, "category_image": "qcategory_Category test 2.png", "под_категории": 2 } ] подкатегория JSON [ { "идентификатор": 6, "sub_category_name": "Арифметика", "sub_category_image": "subcategory_Applenull", «идентификатор_категории»: 1, "вопрос": 0 }, { "идентификатор": 7, "sub_category_name": "Геометрия", "sub_category_image": "subcategory_Banananull", «идентификатор_категории»: 1, "вопрос": 0 }, { "идентификатор": 8, "sub_category_name": "Вопросы Gk, класс 1", "sub_category_image": "subcategory_Carrotnull", «идентификатор_категории»: 2, "вопрос": 0 }, { "идентификатор": 9, "sub_category_name": "Вопросы Gk, класс 2", "sub_category_image": "subcategory_Radishnull", «идентификатор_категории»: 2, "вопрос": 0 } ] Код создания данных
Основная категория `публичный класс Quiz_Category реализует Serializable { //публичный длинный идентификатор; общедоступный длинный идентификатор; общедоступная строка имя_категории; общедоступная строка Category_image; общедоступная строка q_count; публичный строковый вопрос; общественный длинный getId() { вернуть идентификатор; } общественный недействительный setId (длинный идентификатор) { this.id = идентификатор; } публичная строка getCategory_image() { вернуть категорию_изображение; } public void setCategory_image (String Category_image) { this.category_image = Category_image; } public List questions_list = новый ArrayList(); }` Данные подкатегорий ` общедоступный внутренний идентификатор; общедоступная строка sub_category_name; общедоступная строка sub_category_image; общественный Длинный Category_id; публичный строковый вопрос; общественный int getId() { вернуть идентификатор; } общественный недействительный setId (int id) { this.id = идентификатор; } публичная строка getSub_Category_image() { вернуть sub_category_image; } public void setSub_Category_image (String sub_category_image) { this.sub_category_image = sub_category_image; } ` Администратор моей категории
public ViewHolder(View v) { супер (в); имя_категории = (TextView) v.findViewById(R.id.txtcustomrow); below_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); } } публичный фильтр getFilter() { вернуть мФильтер; } // Предоставляем подходящий конструктор (зависит от типа набора данных) public QuizAdapter (Context ctx, List items) { this.ctx = ctx; original_items = предметы; filtered_items = элементы; список категорий = элементы; ctx.getTheme().resolveAttribute(R.attr.selectableItemBackground, mTypedValue, true); mBackground = mTypedValue.resourceId; } @Override public QuizAdapter.ViewHolder onCreateViewHolder (родитель ViewGroup, int viewType) { Представление v = LayoutInflater.from(parent.getContext()).inflate(R.layout.quiz_list, родительский, false); v.setBackgroundResource(mBackground); ViewHolder vh = новый ViewHolder (v); вернуть вх; } // Заменяем содержимое представления (вызываемого менеджером макета) @Override public void onBindViewHolder(@NonNull ViewHolder Holder,final int Position) { окончательная Quiz_Category p = filtered_items.get(позиция); //финальная 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); Строковый URL = DataManager.catphotourl+ Categorylist.get(position).category_image; пытаться { url = URLDecoder.decode(url, "UTF-8"); URL = url.replaceAll(" ", "%20"); } catch (UnsupportedEncodingException e1) { // TODO Автоматически сгенерированный блок catch e1.printStackTrace(); } //holder.category_image.setImage(url); Holder.lyt_parent.setOnClickListener(новый View.OnClickListener() { @Override public void onClick (Просмотр) { Намерение я = новое намерение (ctx, ActivitySubCategoryDetails.class); i.putExtra(ActivitySubCategoryDetails.EXTRA_OBJCT, p); ctx.startActivity(я); } }); } // Возвращаем размер вашего набора данных (вызываемого менеджером компоновки) @Override общественный ИНТ getItemCount () { вернуть список категорий!= ноль? список категорий.размер(): 0; //возвращаем filtered_items.size(); } @Override public long getItemId (int Position) { return filtered_items.get(position).id; } частный класс ItemFilter расширяет фильтр { @Override protected FilterResults PerformFiltering (ограничение CharSequence) { Строковый запрос = ограничение.toString().toLowerCase(); Результаты FilterResults = новый FilterResults(); окончательный список list = original_items; окончательный список result_list = новый ArrayList(list.size()); for (int i = 0; i < list.size(); i++) { Строка str_title = list.get(i).category_name; если (str_title.toLowerCase().contains(query)) { result_list.add(list.get(i)); } } результаты.значения = список_результатов; results.count = result_list.size(); возврат результатов; } в настоящее время я использую FilterResults для фильтрации подкатегорий.
Загрузчик категорий
публичный класс QuizListLoader расширяет AsyncTask { Строковый URL = Constant.getURLquizcategory(); частный Gson gson = новый Gson(); общедоступный интерфейс TaskListener { public void onFinished (результат List); } // Это ссылка на связанный прослушиватель частный окончательный TaskListener TaskListener; public QuizListLoader (прослушиватель TaskListener) { this.taskListener = слушатель; } @Override protected List doInBackground(String... params) { Список ArrayList = новый ArrayList(); Quiz_Category[] f = null; пытаться { URL-адрес = новый URL-адрес (URL); HttpURLConnection con = (HttpURLConnection) url.openConnection(); Gson gson = новый Gson(); Читатель JsonReader = новый JsonReader(новый InputStreamReader(con.getInputStream())); f = gson.fromJson(читатель, Quiz_Category[].class); for (Quiz_Category цветок: f) { list.add(цветок); } } catch (Исключение е) { е.printStackTrace(); вернуть ноль; } список возврата; } @Override protected void onPostExecute (результат List) { super.onPostExecute(результат); // В onPostExecute мы проверяем, действителен ли прослушиватель если (this.taskListener != null) { this.taskListener.onFinished(результат); } } Загрузчик подкатегорий
публичный класс SubCat_List_Loader расширяет AsyncTask { Строковый URL = Constant.getURLsubcategory(); частный Gson gson = новый Gson(); общедоступный интерфейс TaskListener { public void onFinished (результат List); } // Это ссылка на связанный прослушиватель частный окончательный TaskListener TaskListener; public SubCat_List_Loader (прослушиватель TaskListener) { this.taskListener = слушатель; } @Override защищенный список doInBackground(String... параметры) { Список ArrayList = новый ArrayList(); Подкатегория [] е = ноль; пытаться { URL-адрес = новый URL-адрес (URL); HttpURLConnection con = (HttpURLConnection) url.openConnection(); Gson gson = новый Gson(); Читатель JsonReader = новый JsonReader(новый InputStreamReader(con.getInputStream())); f = gson.fromJson(читатель, SubCategory[].class); for (Подкатегория цветок: f) { list.add(цветок); } } catch (Исключение е) { е.printStackTrace(); вернуть ноль; } список возврата; } @Override protected void onPostExecute (результат List) { super.onPostExecute(результат); // В onPostExecute мы проверяем, действителен ли прослушиватель если (this.taskListener != null) { this.taskListener.onFinished(результат); } } Я пытаюсь открыть подкатегории в отдельном просмотре recyclerview каждый раз, когда пользователь нажимает на категорию. Все подкатегории имеют собственный Category_id.
спасибо.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение