Tugglebutton и заполнение listview

Milevoje

Здравствуйте, помогите пожалуйста, имеется tugglebutton и listview заполняющийся из двух массивов, как сделать так чтобы при одном положении taglebutton в listview выводился первый массив, а при другом положении второй.

код xml:

<!--?xml version="1.0" encoding="utf-8"?-->
<android.support.constraint.constraintlayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.admin.orshagoes.number_1">

    <linearlayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical">

        <textview android:layout_width="wrap_content" android:layout_height="wrap_content" android:textsize="16sp" android:text="Направление:" android:textcolor="#000000" android:layout_gravity="right">

        <togglebutton android:id="@+id/toggleButton1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:checked="false" android:text="ToggleButton" android:textoff="ОБРАТНОЕ ↓" android:texton="ПРЯМОЕ ↑">

        <listview android:id="@+id/listview1" android:layout_width="fill_parent" android:layout_height="wrap_content">
    </listview></togglebutton></textview></linearlayout>
</android.support.constraint.constraintlayout>

код активити:

package com.example.admin.orshagoes;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

public class number_1 extends AppCompatActivity {

    String [] arr; //={"Вокзал", "Школа №12"};
    ListView listView1;
    String [] arrob;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_number_1);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        arrob = getResources().getStringArray(R.array.names1ob);
        arr = getResources().getStringArray(R.array.names1);

        listView1 = (ListView) findViewById(R.id.listview1);

        // Создаём адаптер ArrayAdapter, чтобы привязать массив к ListView
       ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, android.R.layout.simple_list_item_1, arr);

        // Привяжем массив через адаптер к ListView
        listView1.setAdapter(adapter);
    }

        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            if (id == android.R.id.home) {
                finish();
            }
            return super.onOptionsItemSelected(item);
        }
}
</string></string>
1 ответ

Milevoje

  • Добавляем List элементов, через который будем менять отображение
  • Вешаем обработчик на изменения состояний кнопки setOnCheckedChangeListener.
  • Внутри его меняем данные адаптера adapterList.addAll(Arrays.asList(arrob)); \ adapterList.addAll(Arrays.asList(arr));
  • Сообщаем View, что в адаптере новые данные и их нужно перерисовать adapter.notifyDataSetChanged();
public void setMyAdapter(final ArrayAdapter adapter){
    ToggleButton toggle = (ToggleButton) findViewById(R.id.toggleButton1);
    toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            adapterList.clear();
            if (isChecked) {
                adapterList.addAll(Arrays.asList(arrob));
            } else {
                adapterList.addAll(Arrays.asList(arr));
            }
            adapter.notifyDataSetChanged();
        }
    });
}

В вашем коде будет выглядеть так:

public class number_1 extends AppCompatActivity {

    String [] arr; //={"Вокзал", "Школа №12"};
    ListView listView1;
    String [] arrob;
    List<string> adapterList;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_number_1);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);

        arrob = getResources().getStringArray(R.array.names1ob);
        arr = getResources().getStringArray(R.array.names1);

        adapterList = new ArrayList<>(Arrays.asList(arr));

        listView1 = (ListView) findViewById(R.id.listview1);

        // Создаём адаптер ArrayAdapter, чтобы привязать массив к ListView
       ArrayAdapter<string> adapter = new ArrayAdapter<string>(this, android.R.layout.simple_list_item_1, adapterList);

        // Привяжем массив через адаптер к ListView
        listView1.setAdapter(adapter);

        setMyAdapter(adapter);
    }

        public boolean onOptionsItemSelected(MenuItem item) {
            int id = item.getItemId();
            if (id == android.R.id.home) {
                finish();
            }
            return super.onOptionsItemSelected(item);
        }

        public void setMyAdapter(final ArrayAdapter adapter){
            ToggleButton toggle = (ToggleButton) findViewById(R.id.toggleButton1);
            toggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    adapterList.clear();
                    if (isChecked) {
                       adapterList.addAll(Arrays.asList(arrob));
                    } else {
                        adapterList.addAll(Arrays.asList(arr));
                    }
                    adapter.notifyDataSetChanged();
                }
            });
        }
}
</string></string></string>

licensed under cc by-sa 3.0 with attribution.