Android expandablelistview具有6到7个textview和一个imageview作为子视图 [英] Android expandablelistview with 6 to 7 textviews and an imageview as child views

查看:66
本文介绍了Android expandablelistview具有6到7个textview和一个imageview作为子视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我经历了许多教程,并实现了expandablelistview,其中一个textview作为groupview的子级.现在,我需要实现6-7个textview和一个imageview作为每个组的子级来实现expandablelistview. 谁能帮忙..

I have gone through many tutorials and implemented expandablelistview with one textview as a child of groupview. Now i need to implement expandablelistview with 6-7 textviews and an imageview as childs of every group. Can anyone help..

对不起,绘画不好 https://copy.com/IdpK0BLDUHck

Sorry for poor painting https://copy.com/IdpK0BLDUHck

推荐答案

源代码

https://drive.google.com/open?id=0BzBKpZ4nzNzUVkExUDlqRFhtcGc

package com.keshav.expandablelistviewindrawerkeshav;

import android.os.Bundle;
import android.support.v4.view.GravityCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBarDrawerToggle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ImageView;
import android.widget.Toast;

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

public class DrawerActivityExpandable extends AppCompatActivity 
{
    Toolbar toolbar;
    private DrawerLayout drawer;
    private ExpandableListView drawerList;
    private ActionBarDrawerToggle actionBarDrawerToggle;
    List<String> listDataHeader;
    HashMap<String, List<String>> listDataChild;

    ImageView profile_image;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_drawer_expandable);

        toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        toolbar.setTitle("ABC");
//        getSupportActionBar().setDisplayShowHomeEnabled(true);

        initDrawer();

        // Listview Group click listener
        drawerList.setOnGroupClickListener(new ExpandableListView.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
        drawerList.setOnGroupExpandListener(new ExpandableListView.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) {
                    drawerList.collapseGroup(previousGroup);
                }
                previousGroup = groupPosition;
                flag = true;

                if(groupPosition==0 ||groupPosition==1||groupPosition==4){
                    drawer.closeDrawer(drawerList);
                    toolbar.setTitle(""+listDataHeader.get(groupPosition));
                }
            }
        });


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

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

            }
        });


        // Todo Listview on child click listener
        drawerList.setOnChildClickListener(new ExpandableListView.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)
                                + " : keshav : "
                                + listDataChild.get(
                                listDataHeader.get(groupPosition)).get(
                                childPosition), Toast.LENGTH_SHORT)
                        .show();

                Log.e("keshav","Child Data 1->"+listDataHeader.get(groupPosition));
                Log.e("keshav","Child Data 2->"+listDataChild.get(listDataHeader.get(groupPosition)).get(childPosition));

                toolbar.setTitle(""+listDataChild.get(listDataHeader.get(groupPosition)).get(childPosition));

//                if(groupPosition==2 ||groupPosition==3)
                    drawer.closeDrawer(drawerList);

                return false;
            }
        });

        profile_image.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {

                Log.e("Keshav", "Clck Profile Image");

                /*if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                    int permissionCheck = ContextCompat.checkSelfPermission(DrawerActivity.this,
                            Manifest.permission.CAMERA);
                    if (permissionCheck == PackageManager.PERMISSION_GRANTED) {
                        //showing dialog to select image
                        selectImage();
                        Log.e("permission", "granted");
                    } else {
                        ActivityCompat.requestPermissions(DrawerActivity.this,
                                new String[]{Manifest.permission.READ_EXTERNAL_STORAGE,
                                        Manifest.permission.WRITE_EXTERNAL_STORAGE,
                                        Manifest.permission.CAMERA}, 1);
                    }
                } else {
                    selectImage();
                }*/
            }
        });
    }

    private void initDrawer() {
        drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

        drawerList = (ExpandableListView) findViewById(R.id.left_drawer);

        View header = getLayoutInflater().inflate(R.layout.nav_header_main, null);
        drawerList.addHeaderView(header);
        drawer.setDrawerShadow(R.mipmap.drawer_shadow, GravityCompat.START);

        profile_image = (ImageView) header.findViewById(R.id.user_profile_image);

        profile_image.setBackgroundResource(R.mipmap.keshav);


//        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
//        getSupportActionBar().setHomeButtonEnabled(true);

        // preparing list data
        prepareListData();

        drawerList.setAdapter(new NavigationDrawerExpandableAdapter(this, listDataHeader, listDataChild));

//        drawerList.setOnChildClickListener(this);

        actionBarDrawerToggle = new ActionBarDrawerToggle(this, drawer, toolbar, R.string.drawer_open, R.string.drawer_close) {

            @Override
            public void onDrawerClosed(View drawerView) {
                // Code here will be triggered once the drawer closes as we don't want anything to happen so we leave this blank
                super.onDrawerClosed(drawerView);
            }

            @Override
            public void onDrawerOpened(View drawerView) {
                // Code here will be triggered once the drawer open as we don't want anything to happen so we leave this blank

                super.onDrawerOpened(drawerView);
            }
        };

        //Setting the actionbarToggle to drawer layout
        drawer.setDrawerListener(actionBarDrawerToggle);

        //calling sync state is necessay or else your hamburger icon wont show up
        actionBarDrawerToggle.syncState();
    }

    /*
     * Preparing the list data
     */
    private void prepareListData() {

        listDataHeader = new ArrayList<String>();
        listDataChild = new HashMap<String, List<String>>();

        // Adding child data
        listDataHeader.add("Dashboard");
        listDataHeader.add("Enter Manually");
        listDataHeader.add("Profile");
        listDataHeader.add("Reports");
        listDataHeader.add("Logout");


        // TODO Adding child data
        List<String> nowShowing = new ArrayList<String>();
        nowShowing.add("My Profile");
        nowShowing.add("Change Password");

        List<String> blank = new ArrayList<String>();

        List<String> report = new ArrayList<String>();
        report.add("Batch Wise Report");
        report.add("Location Wise Report");
        report.add("Date Wise Report");

        listDataChild.put(listDataHeader.get(0), blank);
        listDataChild.put(listDataHeader.get(1), blank); // Header, Child data
        listDataChild.put(listDataHeader.get(2), nowShowing);
        listDataChild.put(listDataHeader.get(3), report);
        listDataChild.put(listDataHeader.get(4), blank);
    }
}
-------------------------------
Adapter
------------------------------
package com.keshav.expandablelistviewindrawerkeshav;

import android.app.Activity;
import android.content.Context;
import android.graphics.Typeface;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ImageView;
import android.widget.TextView;

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

/**
 * Created by root on 11/12/15.
 */
public class NavigationDrawerExpandableAdapter extends BaseExpandableListAdapter {

    public LayoutInflater minflater;
    public Activity activity;
    private Context _context;
    private List<String> _listDataHeader; // header titles
    // child data in format of header title, child title
    private HashMap<String, List<String>> _listDataChild;

    public NavigationDrawerExpandableAdapter(Context context, List<String> listDataHeader,
                                             HashMap<String, List<String>> listChildData) {
        this._context = context;
        this._listDataHeader = listDataHeader;
        this._listDataChild = listChildData;
    }

    public void setInflater(LayoutInflater mInflater, Activity act) {
        this.minflater = mInflater;
        activity = act;
    }

    @Override
    public Object getChild(int groupPosition, int childPosititon) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .get(childPosititon);
    }

    @Override
    public long getChildId(int groupPosition, int childPosition) {
        return childPosition;
    }

    @Override
    public View getChildView(int groupPosition, final int childPosition,
                             boolean isLastChild, View convertView, ViewGroup parent) {

        final String childText = (String) getChild(groupPosition, childPosition);

        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_item, null);
        }

        TextView txtListChild = (TextView) convertView
                .findViewById(R.id.lblListItem);
        txtListChild.setText(childText);

        //TODO set Hard Code Child item

        ImageView iv_ListChild = (ImageView) convertView
                .findViewById(R.id.iv_ListChild);
        txtListChild.setText(childText);

        Log.e("Keshav", "childText 1 -> " + childText);
        if (childText.equals("My Profile")){
            iv_ListChild.setBackgroundResource(R.mipmap.youtuben);
        }else if (childText.equals("Change Password")){
            iv_ListChild.setBackgroundResource(R.mipmap.facebook);
        }else if (childText.equals("Batch Wise Report")){
            iv_ListChild.setBackgroundResource(R.mipmap.googleplus);
        }else if (childText.equals("Location Wise Report")){
            iv_ListChild.setBackgroundResource(R.mipmap.linkedin);
        }else if (childText.equals("Date Wise Report")){
            iv_ListChild.setBackgroundResource(R.mipmap.twitter);
        }else {
            iv_ListChild.setBackgroundResource(R.mipmap.ic_launcher_round);
        }
        //TODO set Hard Code Child item



        return convertView;
    }

    @Override
    public int getChildrenCount(int groupPosition) {
        return this._listDataChild.get(this._listDataHeader.get(groupPosition))
                .size();
    }

    @Override
    public Object getGroup(int groupPosition) {
        return this._listDataHeader.get(groupPosition);
    }

    @Override
    public int getGroupCount() {
        return this._listDataHeader.size();
    }

    @Override
    public long getGroupId(int groupPosition) {
        return groupPosition;
    }

    @Override
    public void onGroupCollapsed(int groupPosition) {
        super.onGroupCollapsed(groupPosition);
    }

    @Override
    public void onGroupExpanded(int groupPosition) {
        super.onGroupExpanded(groupPosition);
    }

    @Override
    public View getGroupView(int groupPosition, boolean isExpanded,
                             View convertView, ViewGroup parent) {
        String headerTitle = (String) getGroup(groupPosition);
        if (convertView == null) {
            LayoutInflater infalInflater = (LayoutInflater) this._context
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = infalInflater.inflate(R.layout.list_group, null);
        }

        TextView lblListHeader = (TextView) convertView
                .findViewById(R.id.lblListHeader);
        lblListHeader.setTypeface(null, Typeface.NORMAL);       // TODO Set Text Color BOLD Here
        lblListHeader.setText(headerTitle);

        Log.e("keshav","groupPosition "+groupPosition);

        ImageView iv_ListHeader = (ImageView) convertView
                .findViewById(R.id.iv_ListHeader);
        if(groupPosition==0)
            iv_ListHeader.setBackgroundResource(R.mipmap.changepassword_48);
        else if(groupPosition==1)
            iv_ListHeader.setBackgroundResource(R.mipmap.barcode_48);
        else if(groupPosition==2)
            iv_ListHeader.setBackgroundResource(R.mipmap.changepassword_48);
        else if(groupPosition==3)
            iv_ListHeader.setBackgroundResource(R.mipmap.enter_manualy_48);
        else
            iv_ListHeader.setBackgroundResource(R.mipmap.ic_launcher);


        return convertView;
    }

    @Override
    public boolean hasStableIds() {
        return false;
    }

    @Override
    public boolean isChildSelectable(int groupPosition, int childPosition) {
        return true;
    }

}

------------------------------------
activity_drawer.xml
-------------------------------------
<android.support.v4.widget.DrawerLayout 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:id="@+id/drawer_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <LinearLayout
            android:id="@+id/container_toolbar"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <include
                android:id="@+id/toolbar"
                layout="@layout/toolbar" />
        </LinearLayout>

        <FrameLayout
            android:id="@+id/fllContent"
            android:layout_width="fill_parent"
            android:layout_height="0dp"
            android:layout_weight="1" />

    </LinearLayout>

    <ExpandableListView
        android:id="@+id/left_drawer"
        android:layout_width="240dp"
        android:layout_height="match_parent"
        android:layout_gravity="start"
        android:groupIndicator="@null"
        android:dividerHeight="1dp"
        android:divider="@color/list_divider"
        android:listSelector="@drawable/list_selector"
        android:background="@color/list_background" />

    <!--android:groupIndicator="@null"-->

</android.support.v4.widget.DrawerLayout>

------------------------------------
listgroup.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="40dp"
    android:orientation="horizontal"
    android:background="@drawable/list_selector">

    <ImageView
        android:id="@+id/iv_ListHeader"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="10dp"
        android:background="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/lblListHeader"
        style="@style/TextViewSmallBlack"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="10dp"
        android:layout_marginBottom="10dp"
        android:gravity="left"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:text="list group"
        android:textSize="14sp"
        />
</LinearLayout>

------------------------------------
listitem.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="40dp"
    android:orientation="horizontal"
    android:background="@drawable/list_selector">


    <ImageView
        android:id="@+id/iv_ListChild"
        android:layout_width="25dp"
        android:layout_height="25dp"
        android:layout_marginTop="10dp"
        android:layout_marginLeft="40dp"
        android:layout_marginBottom="10dp"
        android:background="@mipmap/ic_launcher" />

    <TextView
        android:id="@+id/lblListItem"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="14dip"
        style="@style/TextViewSmallBlack"
        android:layout_marginTop="5dp"
        android:layout_marginLeft="10dp"
        android:gravity="left"
        android:paddingBottom="5dp"
        android:paddingTop="5dp"
        android:text="list group"
        />

</LinearLayout>


------------------------------------
navheader.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="190dp"
    android:gravity="start"
    android:background="@color/colorPrimary"
    android:orientation="vertical"><!--android:background="@color/com_facebook_button_background_color_disabled"-->

    <de.hdodenhof.circleimageview.CircleImageView
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/user_profile_image"
        android:layout_width="90dp"
        android:layout_height="90dp"
        android:layout_marginLeft="20dp"
        android:layout_centerHorizontal="true"
        android:layout_centerVertical="true"
        android:layout_marginTop="40dp"
        app:border_color="@color/click_tick" />

    <TextView
        android:id="@+id/userName"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/user_profile_image"
        android:layout_centerHorizontal="true"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="10dp"
        android:gravity="left"
        android:text="Keshav Gera"
        android:textColor="@color/white"
        android:textSize="16sp"
        android:textStyle="bold" />  <!--android:textSize="14sp"-->

     <TextView
         android:id="@+id/usertype"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:text=""
         android:gravity="left"
         android:layout_marginLeft="20dp"
         android:layout_marginTop="10dp"
         android:layout_marginBottom="5dp"
         android:textSize="10sp"
         android:textColor="#fff"
         android:layout_alignParentBottom="true"
         android:layout_alignLeft="@+id/userName"
         android:layout_alignStart="@+id/userName" />  <!--android:textSize="14sp"-->

</LinearLayout>


    <!--
<?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="@dimen/nav_header_height"
    android:background="@drawable/side_nav_bar"
    android:gravity="bottom"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:theme="@style/ThemeOverlay.AppCompat.Dark">

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:src="@android:drawable/sym_def_app_icon" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:paddingTop="@dimen/nav_header_vertical_spacing"
        android:text="Android Studio"
        android:textAppearance="@style/TextAppearance.AppCompat.Body1" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="android.studio@android.com" />

</LinearLayout>
-->

------------------------------------
toolbar.xml
------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:local="http://schemas.android.com/apk/res-auto"
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:minHeight="?attr/actionBarSize"
    android:background="?attr/colorPrimary"
    local:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
    local:popupTheme="@style/ThemeOverlay.AppCompat.Light" />

这篇关于Android expandablelistview具有6到7个textview和一个imageview作为子视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆