Сопоставить элементы в ListView от одного адаптера со значениями из другого ListView и адаптера

1

У меня есть следующий XML файл:

<?xml version="1.0" encoding="utf-8"?>
<myxml source-info-url="http://url.com/" source-info-name="URLName" generator-info-url="http://url.org/">
    <tag1 id="92">
        <display-name>1</display-name>
        <icon src="http://some_valid_url.gif" />
    </tag1>
    <tag1 id="107">
        <display-name>2</display-name>
        <icon src="http://some_valid_url.gif" />
    </tag1>
    <tag1 id="175">
        <display-name>3</display-name>
        <icon src="http://some_valid_url.gif" />
    </tag1>
    <tag1 id="346">
        <display-name>4</display-name>
        <icon src="http://some_valid_url.gif" />
    </tag1>
    <tag1 id="357">
        <display-name>5</display-name>
        <icon src="http://some_valid_url.gif" />
    </tag1>


    <tag2 attr1="" attr2="" tag1="92">
        <exampletag1>Text</exampletag1>
        <exampletag2 lang="en">Text</exampletag2>
        <exampletag3 id="21">Text</exampletag3>
        <desc lang="en">Text.</desc>
        <exampletag4>6</exampletag4>
    </tag2>
    <tag2 attr1="" attr2="" tag1="92">
        <exampletag1>&quot;Text&quot;.</exampletag1>
        <exampletag2 lang="en">Text</exampletag2>
    </tag2>
    <tag2 attr1="" attr2="" tag1="92">
        <exampletag1>Text.</exampletag1>
        <exampletag2 lang="en">Text</exampletag2>
    </tag2>

    <tag2 attr1="" attr2="" tag1="107">
        <exampletag1>&quot;Text&quot;.</exampletag1>
        <exampletag2 lang="en">Text</exampletag2>
        <exampletag3 id="22">Text</exampletag3>
        <exampletag3 id="32">Text</exampletag3>
        <exampletag3 id="21">Text</exampletag3>
        <desc lang="en">Text.</desc>
        <exampletag4>6</exampletag4>
    </tag2>
</myxml>

<tag2> будет повторяться несколько тысяч раз. <tag1> будет повторяться несколько сотен раз.

Я проанализировал XML с XMLPullParser, создал 2 пользовательских адаптера и создал 2 ListViews:

listView.setAdapter(adapter);//include all of <tag1>
listView2.setAdapter(adapterPr);//include all of <tag2>

В активности по умолчанию я показываю listView, а listView2 GONE.

Итак, теперь у меня есть два ListView, заполненных информацией. Много информации.

Нажав на элементы в listView я хочу прочитать атрибут <tag1 id=""> и сравнить его с атрибутом <tag2 tag1="107">.

Если сравнение успешное - показывать в listview2 только элементы с этим идентификатором.

Нажав кнопку "Назад", я возвращаюсь в listView и хочу повторить эти действия снова и снова.

Для этого я попытался написать следующий OnItemClickListener (в том числе с комментариями, также пытался без for):

    private List<ItemTAG1> items = new ArrayList();
    private List<ItemTAG2> items2 = new ArrayList();
...
    listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

                    for(int i=0; i<=items.size(); i++) {
    //                    ItemTAG1 itemTAG1 = adapter.getItem(position);
    //                    ItemTAG2 itemTAG2 = adapter2.getItem(position);
                        ItemTAG1 itemTAG1 = items.get(i);
                        ItemTAG2 itemTAG2 = items2.get(i);

                        String tmpCI = itemTAG1.getTAGId();
                        String tmpPCI = itemTAG2.getTAG2id();

                        if (!tmpCI.equals(tmpPCI)) {
                            listView.setVisibility(View.GONE);
                            listViewProgrammes.setVisibility(View.VISIBLE);
                        } else {
    //                        adapterPr.remove(item2);
                            Toast.makeText(MyaActivity.this, "No data for this item!", Toast.LENGTH_SHORT).show();
                        }

                   }

Но все, что я пробовал, неверно, и я все еще не могу достичь того, что мне нужно.

Я хочу написать, что происходит, когда я выполняю этот код, но я понял, что ничего не сделал для фильтрации listView2 от бесполезных элементов для определенного элемента listView и я понятия не имею, что мне следует для этого сделать.

Как я могу сравнить значения и показать в listView2 то, что мне нужно?

Теги:
listview

1 ответ

0

Попробуй это:

  1. Внутри класса ItemTag2 добавьте:

    @Override
    public String toString() {
        return getTAG2id();
    }
    
  2. Измените OnItemClickListener на это:

        listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            ItemTAG1 itemTAG1 = items.get(position);
            String tmpCI = itemTAG1.getTAGId();
            adapter2.getFilter().filter(tmpCI, new Filter.FilterListener() {
                @Override
                public void onFilterComplete(int count) {
                    if(count > 0) {
                        listView2.setVisibility(View.VISIBLE);
                    }else{
                        listView2.setVisibility(View.GONE);
                        Toast.makeText(MyaActivity.this, "No data for this item!", Toast.LENGTH_SHORT).show();
                    }
    
                }
            });
        }
    

Надеюсь, это поможет!

  • 0
    почти сделано, но теперь в listview2 у меня есть правильное количество элементов, но это элементы из listview
  • 0
    Я написал неверную информацию. Проблема следующая: во втором элементе listView2 меня есть элементы из первого элемента listView2 . Количество этих элементов верно, а текст неверен. Как я могу это исправить?
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню