Как дочерний элемент listview может иметь данные для каждого элемента

#java #android #arraylist #android-listview

#java #Android #arraylist #android-listview

Вопрос:

У меня есть два listviews, родительский listview с эссе элемента, который содержит дочерний listview с «заголовком эссе 20». Когда заголовок эссе щелкнул по нему, открывается действие, имеющее текстовое представление для отображения текста. Я не хочу делать 20 действий для 20 эссе каждое. есть ли какой-либо способ, когда я открываю любой дочерний элемент, он показывает только указанные данные для этого только для этого дочернего элемента. вот пример фотографий

Родительский список и открытое описательное эссе

[https://drive.google.com/file/d/1QksjP7hzpqmVCk_Y1ctwsDMYkijDHQPt/view?usp=sharing ][1]

После нажатия на описательное эссе. ОН показывает список дочерних эссе

[https://drive.google.com/open?id=1NLbkrKD9c8yZb7rvapCxb-Na_lCVJf3P ][2]

Теперь нажмите на заголовок эссе дочернего элемента списка «Не называйте человека счастливым до». он показывает полный ответ

[https://docs.google.com/uc?export=downloadamp;id=1542uOZFzLx8vU7EMlsEhRaWZaguVTKHV ] [3]

Я искал везде, я точно не знаю, что делать. Извините, но я новичок в разработке Android. Я только что создал пользовательский адаптер и список массивов

  public class Writing extends AppCompatActivity {
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.formenuitem);


            ArrayList<MenuItems> essay = new ArrayList<>();



            ArrayList<MenuItems> items = new ArrayList<>();

            ArrayList<MenuItems> task2Item = new ArrayList<>();

            //================= main items
            items.add(new MenuItems("Descriptive Essay", "list of descriptive essay and solutions"));

            items.add(new MenuItems("Essay 1", "More Essay list"));

            items.add(new MenuItems("Type of Essay ", "How to start Essay Task 1, body-paragraph "));


            items.add(new MenuItems("Task 2", "Solved essay "));


   //show this list in when clicked on Descriotive essay item================================================================


            task2Item.add(new MenuItems("Call No Man Happy Till","This essay about crime"));
            task2Item.add(new MenuItems("Education","This essay about Education"));
            task2Item.add(new MenuItems("University","This essay about University"));
            task2Item.add(new MenuItems("Food","This essay about Food"));
            task2Item.add(new MenuItems("Games","This essay about crime"));
            task2Item.add(new MenuItems("Experience","This essay about crime"));
            task2Item.add(new MenuItems("This is another essay","This essay about crime"));
            task2Item.add(new MenuItems("This is another essay","This essay about crime"));




    //======================set up for main item list
         final    ListAdapter adapter = new ListAdapter(this, items, R.color.category_numbers);


         //setting adapter to have task 2 list
            final ListAdapter task2list = new ListAdapter(Writing.this ,task2Item,R.color.category_numbers);

            //creating variable to find list view for both
          final  ListView listView = findViewById(R.id.list);

          final ListView task2 = (ListView) findViewById(R.id.list);

            listView.setAdapter(adapter);

            // set up to click on the writing

            listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                        if(position==0){
                            // make clickable at position 0

                            task2.setAdapter(task2list);

                            task2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                                @Override
                                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                                    if (position==0){

                                        Intent open = new Intent(Writing.this,ContentDisplay.class);

                                        startActivity(open);


                                    }
                                }
                            });

                    }


                }
            });

        }
    }

I just when I open essay item it leads to me to an essay title list and when I click on essay title it shows me whole answer


  [1]: https://i.stack.imgur.com/HpgLL.jpg
  [2]: https://i.stack.imgur.com/wc4wx.jpg
  [3]: https://i.stack.imgur.com/yLqeg.jpg
  

Ответ №1:

Вам нужен пользовательский адаптер. реализуйте прослушиватель onClick внутри представлений адаптера. и для position пометьте представление адаптера и получите его тег в прослушивателе. Я надеюсь, вы знакомы с созданием пользовательского адаптера. В случае, если вам нужна дополнительная помощь, я надеюсь помочь.

Комментарии:

1. спасибо за ваш ответ. и я уже пробовал, но я запутался. с данными, которые я должен хранить, чтобы я мог ссылаться на его идентификатор в пользовательском адаптере. Поэтому, когда я нажимаю на каждый элемент дочернего списка, он открывает разные эссе по каждому элементу. пример. Щелкните Описательное эссе. После нажатия на Описательное эссе. Он показывает список дочерних заголовков эссе, затем я вижу полное эссе

2. Если он показывает разные элементы, пометьте представление в адаптере, используя позицию, не забудьте преобразовать его в строку. Затем позже получите этот тег из прослушивателя onclick с помощью v.getTag() и используйте его для ссылки на нужный вам элемент.

3. Я только что получил некоторое представление о том, о чем вы говорите. ранее я делал это, чтобы иметь изображения в элементе списка с помощью пользовательского адаптера. если я застряну, я отправлю вам полный код, брат