Как использовать расширяемый список в следующем сценарии

Я создаю приложение, которое имеет разные экраны для пользователей-администраторов и разные экраны для обычных пользователей. Когда администратор входит в систему, отображается экран, состоящий из расширяемых списков. Заголовок представления расширяемого списка представляет собой массив строк. Дочерние элементы представляют собой список значений, полученных из базы данных. Теперь, пожалуйста, дайте мне знать, как я могу использовать расширяемый список в моем случае? Поскольку у меня есть другой список для дочерних представлений, должен ли я использовать много адаптеров? Когда я пытаюсь использовать ExpandableListAdapter, он говорит мне реализовать около 8 методов, должен ли я использовать их все, если да, то как? Следующий фрагмент кода - это то, что у меня есть сейчас:

Это мой класс активности администратора:

import android.content.Context;
import android.database.Cursor;
import android.graphics.Color;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.SimpleCursorTreeAdapter;

import java.util.List;


public class AdminActivity extends AppCompatActivity {

    Toolbar toolbar;
    ExpandableListAdapter listAdapter;
    List<String> titleText;
   SQLiteDataBaseAdapter db;

    ExpandableListView login, android, ios, testing, java, dotNet, os, hr, others;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin);

        toolbar = (Toolbar) findViewById(R.id.appBar);
        toolbar.setTitle(" Admin Screen");
        toolbar.setTitleTextColor(Color.WHITE);

        login = (ExpandableListView) findViewById(R.id.expandableListViewLogin);
        android = (ExpandableListView) findViewById(R.id.expandableListViewAndroid);
        ios = (ExpandableListView) findViewById(R.id.expandableListViewIos);
        testing = (ExpandableListView) findViewById(R.id.expandableListViewTesting);
        java = (ExpandableListView) findViewById(R.id.expandableListViewJava);
        dotNet = (ExpandableListView) findViewById(R.id.expandableListViewDotNet);
        os = (ExpandableListView) findViewById(R.id.expandableListViewOS);
        hr = (ExpandableListView) findViewById(R.id.expandableListViewHR);
        others = (ExpandableListView) findViewById(R.id.expandableListViewOthers);



// Lsit of values for header. One for each list view.
        titleText.add("User Id Authentication");
        titleText.add("Android Posts Authentication");
        titleText.add("iOS Posts Authentication");
        titleText.add("Testing Posts Authentication");
        titleText.add("Java Posts Authentication");
        titleText.add("Dot Net Posts Authentication");
        titleText.add("OS Posts Authentication");
        titleText.add("HR Posts Authentication");
        titleText.add("Others Posts Authentication");




        SQLiteDataBaseAdapter db = new SQLiteDataBaseAdapter(this);
        List<String> childData =  db.getAndroidList();


        //setting the list adapter
        listAdapter = new ExpandableListAdapter(this, titleText, childData);// this tells to implement some 8 methods, should I implement??

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_admin, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

}

У меня так много расширяемых списков на одном экране. Список массивов предназначен для заголовков по одному для каждого расширяемого списка, дочерние элементы снова будут списком значений из базы данных. Пожалуйста, дайте мне знать, как использовать расширяемый список в моем случае. Я очень новичок в Android, и я впервые работаю над расширяемым списком. Все предложения приветствуются. Заранее спасибо.


person Keshav1234    schedule 24.05.2015    source источник


Ответы (3)


Вы можете найти хорошие учебные пособия для расширяемого списка по следующей ссылке.

http://www.androidhive.info/2013/07/android-expandable-list-view-tutorial/

Вы можете удалить ненужный заголовок и дочерний элемент из списка строк (на основе администратора/пользователя), прежде чем передать его в качестве входных данных для адаптера представления расширяемого списка.

person Muthukrishnan Suresh    schedule 24.05.2015

Вы должны установить адаптер:

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_admin);

    toolbar = (Toolbar) findViewById(R.id.appBar);
    toolbar.setTitle(" Admin Screen");
    toolbar.setTitleTextColor(Color.WHITE);

    login = (ExpandableListView) findViewById(R.id.expandableListViewLogin);
    android = (ExpandableListView) findViewById(R.id.expandableListViewAndroid);
    ios = (ExpandableListView) findViewById(R.id.expandableListViewIos);
    testing = (ExpandableListView) findViewById(R.id.expandableListViewTesting);
    java = (ExpandableListView) findViewById(R.id.expandableListViewJava);
    dotNet = (ExpandableListView) findViewById(R.id.expandableListViewDotNet);
    os = (ExpandableListView) findViewById(R.id.expandableListViewOS);
    hr = (ExpandableListView) findViewById(R.id.expandableListViewHR);
    others = (ExpandableListView) findViewById(R.id.expandableListViewOthers);
    titleText.add("User Id Authentication");
    titleText.add("Android Posts Authentication");
    titleText.add("iOS Posts Authentication");
    titleText.add("Testing Posts Authentication");
    titleText.add("Java Posts Authentication");
    titleText.add("Dot Net Posts Authentication");
    titleText.add("OS Posts Authentication");
    titleText.add("HR Posts Authentication");
    titleText.add("Others Posts Authentication");
    SQLiteDataBaseAdapter db = new SQLiteDataBaseAdapter(this);
    List<String> childData =  db.getAndroidList();
    //setting the list adapter
    listAdapter = new ExpandableListAdapter(this, titleText, childData);
    ExpandableListView listView = (ExpandableListView) findViewById(R.id.listView);
    listView.setAdapter(listAdapter);

}

person Alexey Shtanko    schedule 24.05.2015
comment
Я пытался это сделать, он просит меня реализовать около 8 методов, должен ли я это сделать? Есть ли другой способ? - person Keshav1234; 24.05.2015

введите здесь описание изображения

**Its Working**

package com.keshav.myexpandablelistviewexampleworkinginactivity;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class MainActivity extends Activity {

    ExpandableListAdapter listAdapter;
    ExpandableListView expListView;
    List<String> listDataHeader;
    HashMap<String, List<String>> listDataChild;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // tODO get the listview
        expListView = (ExpandableListView) findViewById(R.id.lvExp);

        // TODO preparing list data
        prepareListData();

        listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

        // setting list adapter
        expListView.setAdapter(listAdapter);

        // Listview Group click listener
        expListView.setOnGroupClickListener(new OnGroupClickListener() {

            @Override
            public boolean onGroupClick(ExpandableListView parent, View v,
                                        int groupPosition, long id) {
                Toast.makeText(getApplicationContext(),
                        "Group Clicked " + listDataHeader.get(groupPosition),
                        Toast.LENGTH_SHORT).show();
                return false;
            }

        });

        // Listview Group expanded listener
        expListView.setOnGroupExpandListener(new OnGroupExpandListener() {

            // TODO Colapse Here Using this... in android
            int previousGroup = -1;
            boolean flag = false;

            @Override
            public void onGroupExpand(int groupPosition) {

                Log.e("keshav", "onGroupClick is -> " + groupPosition);

                Toast.makeText(getApplicationContext(),
                        listDataHeader.get(groupPosition) + " Expanded",
                        Toast.LENGTH_SHORT).show();

                if (groupPosition != previousGroup && flag) {
                    expListView.collapseGroup(previousGroup);
                }
                previousGroup = groupPosition;

                flag = true;

            }
        });


        // Listview Group collasped listener
        expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

            @Override
            public void onGroupCollapse(int groupPosition) {
                Toast.makeText(getApplicationContext(),
                        listDataHeader.get(groupPosition) + " Collapsed",
                        Toast.LENGTH_SHORT).show();

            }
        });


        // Todo Listview on child click listener
        expListView.setOnChildClickListener(new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                                        int groupPosition, int childPosition, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(
                        getApplicationContext(),
                        listDataHeader.get(groupPosition)
                                + " : "
                                + listDataChild.get(
                                listDataHeader.get(groupPosition)).get(
                                childPosition), Toast.LENGTH_SHORT)
                        .show();
                return false;
            }
        });
    }

    /*
     * Preparing the list data
     */
    private void prepareListData() {
        listDataHeader = new ArrayList<String>();
        listDataChild = new HashMap<String, List<String>>();

        // Adding child data
        listDataHeader.add("Months");
        listDataHeader.add("Top 250");
        listDataHeader.add("Now Showing");
        listDataHeader.add("Coming Soon..");


        // Adding child data
        List<String> weeks = new ArrayList<String>();
        weeks.add("Sunday");
        weeks.add("Monday");
        weeks.add("Tuesday");
        weeks.add("Wednesday");
        weeks.add("Thursday");
        weeks.add("Friday");
        weeks.add("Saturday");


        // Adding child data
        List<String> top250 = new ArrayList<String>();
        top250.add("Om Shanti Om");
        top250.add("Badshah");
        top250.add("Bahubali Part 1");
        top250.add("Carry on Jatta");
        top250.add("Sholey");
        top250.add("Mard");
        top250.add("Dewwar");


        List<String> nowShowing = new ArrayList<String>();
        nowShowing.add("Bahubali");
        nowShowing.add("Kabali");
        nowShowing.add("Luckky Di Unlukky Story");
        nowShowing.add("Sachin Billions Dream");
        nowShowing.add("Red 2");

        List<String> comingSoon = new ArrayList<String>();
        comingSoon.add("Tubelight ");
        comingSoon.add("Bahubali 3 2018");
        comingSoon.add("Dhoom 4");
        comingSoon.add("Hindi Medium");

        listDataChild.put(listDataHeader.get(0), weeks);
        listDataChild.put(listDataHeader.get(1), top250); // Header, Child data
        listDataChild.put(listDataHeader.get(2), nowShowing);
        listDataChild.put(listDataHeader.get(3), comingSoon);
    }
}



package com.keshav.myexpandablelistviewexampleworkinginactivity;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.ExpandableListView.OnGroupClickListener;
import android.widget.ExpandableListView.OnGroupCollapseListener;
import android.widget.ExpandableListView.OnGroupExpandListener;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

public class MainActivity extends Activity {

    ExpandableListAdapter listAdapter;
    ExpandableListView expListView;
    List<String> listDataHeader;
    HashMap<String, List<String>> listDataChild;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // tODO get the listview
        expListView = (ExpandableListView) findViewById(R.id.lvExp);

        // TODO preparing list data
        prepareListData();

        listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);

        // setting list adapter
        expListView.setAdapter(listAdapter);

        // Listview Group click listener
        expListView.setOnGroupClickListener(new OnGroupClickListener() {

            @Override
            public boolean onGroupClick(ExpandableListView parent, View v,
                                        int groupPosition, long id) {
                Toast.makeText(getApplicationContext(),
                        "Group Clicked " + listDataHeader.get(groupPosition),
                        Toast.LENGTH_SHORT).show();
                return false;
            }

        });

        // Listview Group expanded listener
        expListView.setOnGroupExpandListener(new OnGroupExpandListener() {

            // TODO Colapse Here Using this... in android
            int previousGroup = -1;
            boolean flag = false;

            @Override
            public void onGroupExpand(int groupPosition) {

                Log.e("keshav", "onGroupClick is -> " + groupPosition);

                Toast.makeText(getApplicationContext(),
                        listDataHeader.get(groupPosition) + " Expanded",
                        Toast.LENGTH_SHORT).show();

                if (groupPosition != previousGroup && flag) {
                    expListView.collapseGroup(previousGroup);
                }
                previousGroup = groupPosition;

                flag = true;

            }
        });


        // Listview Group collasped listener
        expListView.setOnGroupCollapseListener(new OnGroupCollapseListener() {

            @Override
            public void onGroupCollapse(int groupPosition) {
                Toast.makeText(getApplicationContext(),
                        listDataHeader.get(groupPosition) + " Collapsed",
                        Toast.LENGTH_SHORT).show();

            }
        });


        // Todo Listview on child click listener
        expListView.setOnChildClickListener(new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                                        int groupPosition, int childPosition, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(
                        getApplicationContext(),
                        listDataHeader.get(groupPosition)
                                + " : "
                                + listDataChild.get(
                                listDataHeader.get(groupPosition)).get(
                                childPosition), Toast.LENGTH_SHORT)
                        .show();
                return false;
            }
        });
    }

    /*
     * Preparing the list data
     */
    private void prepareListData() {
        listDataHeader = new ArrayList<String>();
        listDataChild = new HashMap<String, List<String>>();

        // Adding child data
        listDataHeader.add("Months");
        listDataHeader.add("Top 250");
        listDataHeader.add("Now Showing");
        listDataHeader.add("Coming Soon..");


        // Adding child data
        List<String> weeks = new ArrayList<String>();
        weeks.add("Sunday");
        weeks.add("Monday");
        weeks.add("Tuesday");
        weeks.add("Wednesday");
        weeks.add("Thursday");
        weeks.add("Friday");
        weeks.add("Saturday");


        // Adding child data
        List<String> top250 = new ArrayList<String>();
        top250.add("Om Shanti Om");
        top250.add("Badshah");
        top250.add("Bahubali Part 1");
        top250.add("Carry on Jatta");
        top250.add("Sholey");
        top250.add("Mard");
        top250.add("Dewwar");


        List<String> nowShowing = new ArrayList<String>();
        nowShowing.add("Bahubali");
        nowShowing.add("Kabali");
        nowShowing.add("Luckky Di Unlukky Story");
        nowShowing.add("Sachin Billions Dream");
        nowShowing.add("Red 2");

        List<String> comingSoon = new ArrayList<String>();
        comingSoon.add("Tubelight ");
        comingSoon.add("Bahubali 3 2018");
        comingSoon.add("Dhoom 4");
        comingSoon.add("Hindi Medium");

        listDataChild.put(listDataHeader.get(0), weeks);
        listDataChild.put(listDataHeader.get(1), top250); // Header, Child data
        listDataChild.put(listDataHeader.get(2), nowShowing);
        listDataChild.put(listDataHeader.get(3), comingSoon);
    }
}

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:background="#f4f4f4" >

            <ExpandableListView
                android:id="@+id/lvExp"
                android:layout_height="match_parent"
                android:layout_width="match_parent"
                android:cacheColorHint="#00000000"/>   

</LinearLayout>

list_group.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="8dp" 
    android:background="#000000">


    <TextView
        android:id="@+id/lblListHeader"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingLeft="?android:attr/expandableListPreferredItemPaddingLeft"
        android:textSize="17dp"
        android:textColor="#f9f93d" />

</LinearLayout>


list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="55dip"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/lblListItem"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:textSize="17dip"
        android:paddingTop="5dp"
        android:paddingBottom="5dp"
        android:textColor="#000000"
        android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" />

</LinearLayout>
person Keshav Gera    schedule 20.06.2017