Razieh Shahraki

آموزش Expandable List View

27 ارسال در این موضوع قرار دارد

از Expandable List View برای گروه بندی لیست استفاده می شود.

برای شروع کار پروژه جدیدی ایجاد کنید.

در اینجا ما نیاز به 3 فایل xml داریم یکی برای لیست اصلی،دومی برای نمایش گروهها و سومی برای نمایش فرزندهای هر گروه.

کد زیر را در فایل activity_main.xml قرار دهید.

[shcode=xml]<?xml version="1.0" encoding="utf-8"?>

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:orientation="vertical"

    android:background="#f4f4f4" >

 

           

                android:id="@+id/lvExp"

                android:layout_height="match_parent"

                android:layout_width="match_parent"/> 

 

[/shcode]

فایل xml دیگری برای نام گروه ها ایجاد کنید(list_group.xml) و کد زیر را در آن قرار دهید.

[shcode=xml]<?xml version="1.0" encoding="utf-8"?>

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:orientation="vertical"

    android:padding="8dp"

    android:background="#000000">

 

 

   

        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" />

 

[/shcode]

فایلxmlدیگری به نام list_item.xml برای فرزندهای گروه ها ایجاد کنید.

[shcode=xml]<?xml version="1.0" encoding="utf-8"?>

    android:layout_width="match_parent"

    android:layout_height="55dip"

    android:orientation="vertical" >

 

   

        android:id="@+id/lblListItem"

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:textSize="17dip"

        android:paddingTop="5dp"

        android:paddingBottom="5dp"

        android:paddingLeft="?android:attr/expandableListPreferredChildPaddingLeft" />

 

[/shcode]

از یک کلاس آداپتور سفارشی برای ایجاد لیست سفارشی استفاده می کنیم.

یک کلاس جدید به نام ExpandableListAdapter.java ایجاد کنید که از کلاس BaseExpandableListAdapte استفاده می کند.

روش های مورد نیاز برای ارائه listview:

getGroupView()برای بازگشت به فهرست گروه

getChildView()برای بازگشت به لیست آیتم فرزند

کد زیر را در فایل ExpandableListAdapter.java قرار دهید.

[shcode=java]package com.p30droid.expandablelistview;

import java.util.HashMap;

import java.util.List;

 

import android.content.Context;

import android.graphics.Typeface;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.BaseExpandableListAdapter;

import android.widget.TextView;

 

public class ExpandableListAdapter extends BaseExpandableListAdapter {

 

    private Context _context;

    private List _listDataHeader; // header titles

    // child data in format of header title, child title

    private HashMap> _listDataChild;

 

    public ExpandableListAdapter(Context context, List listDataHeader,

            HashMap> listChildData) {

        this._context = context;

        this._listDataHeader = listDataHeader;

        this._listDataChild = listChildData;

    }

 

    @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);

        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 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.BOLD);

        lblListHeader.setText(headerTitle);

 

        return convertView;

    }

 

    @Override

    public boolean hasStableIds() {

        return false;

    }

 

    @Override

    public boolean isChildSelectable(int groupPosition, int childPosition) {

        return true;

    }

}[/shcode]

کد زیر را در فایل MainActivity.java قرار می دهیم.

[shcode=java]package com.p30droid.expandablelistview;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import android.app.Activity;

import android.os.Bundle;

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;

 

public class MainActivity extends Activity {

 

    ExpandableListAdapter listAdapter;

    ExpandableListView expListView;

    List listDataHeader;

    HashMap> listDataChild;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        // get the listview

        expListView = (ExpandableListView) findViewById(R.id.lvExp);

 

        // preparing list data

        prepareListData();

 

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

 

        // setting list adapter

        expListView.setAdapter(listAdapter);

    }

 

    /*

     * Preparing the list data

     */

    private void prepareListData() {

        listDataHeader = new ArrayList();

        listDataChild = new HashMap>();

 

        // Adding child data

        listDataHeader.add("Top 250");

        listDataHeader.add("Now Showing");

        listDataHeader.add("Coming Soon..");

 

        // Adding child data

        List top250 = new ArrayList();

        top250.add("The Shawshank Redemption");

        top250.add("The Godfather");

        top250.add("The Godfather: Part II");

        top250.add("Pulp Fiction");

        top250.add("The Good, the Bad and the Ugly");

        top250.add("The Dark Knight");

        top250.add("12 Angry Men");

 

        List nowShowing = new ArrayList();

        nowShowing.add("The Conjuring");

        nowShowing.add("Despicable Me 2");

        nowShowing.add("Turbo");

        nowShowing.add("Grown Ups 2");

        nowShowing.add("Red 2");

        nowShowing.add("The Wolverine");

 

        List comingSoon = new ArrayList();

        comingSoon.add("2 Guns");

        comingSoon.add("The Smurfs 2");

        comingSoon.add("The Spectacular Now");

        comingSoon.add("The Canyons");

        comingSoon.add("Europa Report");

 

        listDataChild.put(listDataHeader.get(0), top250); // Header, Child data

        listDataChild.put(listDataHeader.get(1), nowShowing);

        listDataChild.put(listDataHeader.get(2), comingSoon);

    }

}[/shcode]

خروجی به صورت زیر می باشد.

323x520http://p30droid.com/Uploader/do.php?img=208[/img]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

خیلی ممنون از شما

یک چیز کم داره، می خوایم یک لیست زیر شاخه کلیک کنیم تا بیاد صفحه دیگه یا Toast نشان بدهد

اینو لازم دارم

با تشکر

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
سلام

توی فایل MainActivity.java بعد خط 36 کد زیر و اضافه کنیدtoast نشون میده

[shcode=java]        expListView.setOnChildClickListener(new OnChildClickListener() {

             

            public boolean onChildClick(ExpandableListView parent, View v,

                    int groupPosition, int childPosition, long id) {

                final String selected = (String) listAdapter.getChild(

                        groupPosition, childPosition);

                Toast.makeText(getBaseContext(), selected, Toast.LENGTH_LONG)

                        .show();

 

                return true;

            }

        });[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

متاسفانه کار نکرد، اصلا Toast نشون نمیده! نه گروه پدر و نه فرزند

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
کد کامل شو گذاشتم

[shcode=java]package com.p30droid.expandablelistview;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import android.app.Activity;

import android.os.Bundle;

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;

 

public class MainActivity extends Activity {

 

    ExpandableListAdapter listAdapter;

    ExpandableListView expListView;

    List listDataHeader;

    HashMap> listDataChild;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        // get the listview

        expListView = (ExpandableListView) findViewById(R.id.lvExp);

 

        // preparing list data

        prepareListData();

 

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

 

        // setting list adapter

        expListView.setAdapter(listAdapter);

        expListView.setOnChildClickListener(new OnChildClickListener() {

             

            public boolean onChildClick(ExpandableListView parent, View v,

                    int groupPosition, int childPosition, long id) {

                final String selected = (String) listAdapter.getChild(

                        groupPosition, childPosition);

                Toast.makeText(getBaseContext(), selected, Toast.LENGTH_LONG)

                        .show();

 

                return true;

            }

        });

    }

 

    /*

     * Preparing the list data

     */

    private void prepareListData() {

        listDataHeader = new ArrayList();

        listDataChild = new HashMap>();

 

        // Adding child data

        listDataHeader.add("Top 250");

        listDataHeader.add("Now Showing");

        listDataHeader.add("Coming Soon..");

 

        // Adding child data

        List top250 = new ArrayList();

        top250.add("The Shawshank Redemption");

        top250.add("The Godfather");

        top250.add("The Godfather: Part II");

        top250.add("Pulp Fiction");

        top250.add("The Good, the Bad and the Ugly");

        top250.add("The Dark Knight");

        top250.add("12 Angry Men");

 

        List nowShowing = new ArrayList();

        nowShowing.add("The Conjuring");

        nowShowing.add("Despicable Me 2");

        nowShowing.add("Turbo");

        nowShowing.add("Grown Ups 2");

        nowShowing.add("Red 2");

        nowShowing.add("The Wolverine");

 

        List comingSoon = new ArrayList();

        comingSoon.add("2 Guns");

        comingSoon.add("The Smurfs 2");

        comingSoon.add("The Spectacular Now");

        comingSoon.add("The Canyons");

        comingSoon.add("Europa Report");

 

        listDataChild.put(listDataHeader.get(0), top250); // Header, Child data

        listDataChild.put(listDataHeader.get(1), nowShowing);

        listDataChild.put(listDataHeader.get(2), comingSoon);

    }

}[/shcode]

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

ببخشید، خیلی ممنون از پاسخگویی شما،

کلا کد شما کپی کردم ، ولی بازم  حل نشد

لطف می کنی دانلود پروژه همین رو بزاری

خیلی ممنون

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

مشکلم حل شد،

 باید

[shcode=java]import  android.widget.ExpandableListAdapter;[/shcode]

خذف شود

نمیشه از طریق ArrayList فراخوانی کرد، مثلا در String.xml چندتا آیتم می سازیم، ExpandableListView از طریق اون آیتم ها نمایش داده بشه، با چی کدی ایجاد کنیم؟

[shcode=java]listDataHeader = new ArrayList(R.array.list_fehrest_array);[/shcode]

شبیه این کد باشه، ولی کار نمی کنه

در اینترنت هر چه گشتم پیدا نبود

کلا کد ListView  با ExpandableListView  فرق می کنه

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام و خسته نباشید

یه سوال من میخوام چنانچه کاربر روی هر کدوم از زیر منوها کلیک کرد یه اکتیویتی جدید بازکنه در واقع هر کدوم از زیر منوها واسه خودشون اکتیویتی جدا داشته باشند ممنون میشم راهنمایی کنید

و یه سوال اینکه امکانش هست که به فرض یکی از ایتم های زیر منو نداشته باشه و خودش هدایت بشه به اکتیویتی جدید

و سوال اخر میشه ایکن زیر منو رو عوض کرد مثلا + بشه تا زیر منو باز بشه

مرسی

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام دوست عزیز

همه اینایی که گفتین با

Expandable List View

سفارشی میشه انجام داد

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

متوجه سفارشی بودن نمیشم امکانش هست توضیح بدید حداقل واسه انتخاب رو هر زیر منو

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
سلام

اگه اموزش ها رو دیده باشی لیست ویو سفارشی هست توشون.اینم مثل همونه خودمون میایم فایل xml برای گروه و زیر گروه ایجاد میکنیم و از اونا استفاده میکنیم

این سمپل ها رو ببین متوجه میشی

http://www.techiecommunity.net/Android/Android-ExpandableListView-Layout-Example

http://www.dreamincode.net/forums/topic/270612-how-to-get-started-with-expandablelistview/

https://github.com/tjerkw/Android-SlideExpandableListView

http://www.learn-android-easily.com/2013/07/android-expandablelistview-example.html

1 کاربر پسند دیده است

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای رفتن به اکتیویتی دیگه توی این نوع منو کد زیر بجای کد اکتیویتی قرار بدین

[shcode=java]

package com.p30droid.expandablelistview;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

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;

 

public class MainActivity extends Activity {

 

    ExpandableListAdapter listAdapter;

    ExpandableListView expListView;

    List listDataHeader;

    HashMap> listDataChild;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        // get the listview

        expListView = (ExpandableListView) findViewById(R.id.lvExp);

 

        // preparing list data

        prepareListData();

 

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

 

        // setting list adapter

        expListView.setAdapter(listAdapter);

        expListView.setOnChildClickListener(new OnChildClickListener() {

            

            public boolean onChildClick(ExpandableListView parent, View v,

                    int groupPosition, int childPosition, long id) {

                final String selected = (String) listAdapter.getChild(

                        groupPosition, childPosition);

//                Toast.makeText(getBaseContext(), selected, Toast.LENGTH_LONG)

//                        .show();

                finish();

                startActivity(new Intent(MainActivity.this,page2.class));

                return true;

            }

        });

    }

 

    /*

     * Preparing the list data

     */

    private void prepareListData() {

        listDataHeader = new ArrayList();

        listDataChild = new HashMap>();

 

        // Adding child data

        listDataHeader.add("Top 250");

        listDataHeader.add("Now Showing");

        listDataHeader.add("Coming Soon..");

 

        // Adding child data

        List top250 = new ArrayList();

        top250.add("The Shawshank Redemption");

        top250.add("The Godfather");

        top250.add("The Godfather: Part II");

        top250.add("Pulp Fiction");

        top250.add("The Good, the Bad and the Ugly");

        top250.add("The Dark Knight");

        top250.add("12 Angry Men");

 

        List nowShowing = new ArrayList();

        nowShowing.add("The Conjuring");

        nowShowing.add("Despicable Me 2");

        nowShowing.add("Turbo");

        nowShowing.add("Grown Ups 2");

        nowShowing.add("Red 2");

        nowShowing.add("The Wolverine");

 

        List comingSoon = new ArrayList();

        comingSoon.add("2 Guns");

        comingSoon.add("The Smurfs 2");

        comingSoon.add("The Spectacular Now");

        comingSoon.add("The Canyons");

        comingSoon.add("Europa Report");

 

        listDataChild.put(listDataHeader.get(0), top250); // Header, Child data

        listDataChild.put(listDataHeader.get(1), nowShowing);

        listDataChild.put(listDataHeader.get(2), comingSoon);

    }

}[/shcode]

برای تغییر ایکن لیست فایل زیر و توی پوشه دراویبل ایجاد کنین

[shcode=xml]<?xml version="1.0" encoding="utf-8"?>

   

          android:drawable="@drawable/down">

   

   

          android:drawable="@drawable/up">

   

[/shcode]

و دوتا ایکن برای حالت های بسته بودن منو و باز بودن اون توی پشوه دراویبل قرار بدین

و کد پایین و توی فایل activity_main.xml توی تگ ExpandableListView تایپ کنین

[shcode=xml]android:groupIndicator="@drawable/indicator"[/shcode]

خب تا اینجا ایکن لیست عوض شد و با کلیک روی هر ایتم میره صفحه بعد

حالا اگه میخوای بهش بگی هر ایتم توی یه اکتیویتی بره اینجوری کد و عوض کن

[shcode=java]        expListView.setOnChildClickListener(new OnChildClickListener() {

            

            public boolean onChildClick(ExpandableListView parent, View v,

                    int groupPosition, int childPosition, long id) {

                final String selected = (String) listAdapter.getChild(

                        groupPosition, childPosition);

                if(groupPosition==0 && childPosition==0){

                     finish();

                     startActivity(new Intent(MainActivity.this,page2.class));

                }

            

              

                return true;

            }

        });[/shcode]

اینجا من فقط بهش گفتم وقتی روی گروه اول که ایدیش 0 هست و فرزند اولش که ایدیش 0 هست کلیک شد بره اکتیویتی page2 رو اجرا کنه

برای بقیه هم میتونی if بذاری و ادامه بدی

یا اینکه عبارتی که روش کلیک شده رو توی شرط قرار بدی .ایتمی که کلیک میشه مقداری توی متغیر selected هست میتونی استفاده کنی


برای گروه هم میتونی قسمتی که گزینه های لیست هست و غیرفعال کنی مثل این

[shcode=java]List top250 = new ArrayList();

        /*top250.add("The Shawshank Redemption");

        top250.add("The Godfather");

        top250.add("The Godfather: Part II");

        top250.add("Pulp Fiction");

        top250.add("The Good, the Bad and the Ugly");

        top250.add("The Dark Knight");

        top250.add("12 Angry Men");*/[/shcode]

و کد زیر و برای کلیک روی گروه به برنامه اضافه کنی

[shcode=java] expListView.setOnGroupClickListener(new OnGroupClickListener() {

           

            @Override

            public boolean onGroupClick(ExpandableListView arg0, View arg1, int arg2,

                    long arg3) {

                // TODO Auto-generated method stub

                 Toast.makeText(getBaseContext(), "روی گروه کلیک شد", Toast.LENGTH_LONG)

                 .show();

                return false;

               

            }

        });[/shcode]

توی این قسمت هم میتونی بگی اگر ایدی گروه 0 بود چیکار کنه 1 بود چیکار و ...

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با سلام و خسته نباشید

ممنون از اینکه جواب سوال ما رو دادید

یه سوال : اگر  بخواهم به فرض تقریبا 50 تا آیتم و هر کدوم 4 یا 5 تا زیر آیتم داشته باشه و هر کدوم به یه اکتیویتی جدید منتقل بشه آیا باید تقریبا به همون اندازه اکتیویتی درست کنیم. به نظرتون اینکار عاقلانه هستش یا شما پیشنهاد بهتری میدید

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام یه سوال دیگه 

اولی اینکه کد خطا داره امکانش هست راهنمایی کنید یکی از ایتم ها زیرمنو نداره منم کدش رو انتهای کد نوشتم تا به یه صفحه جدید بره ولی خطا میده

و دوم اینکه خواستم بدونم چه طور میشه ایکن که زیر منو میشه رو حذفش کرد چون زیر منو نداره

package com.example.expanlist;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import android.app.Activity;import android.content.Intent;import android.os.Bundle;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;public class MainActivity extends Activity {   ExpandableListAdapter listAdapter;   ExpandableListView expListView;   List listDataHeader;   HashMap> listDataChild;   @Override   protected void onCreate(Bundle savedInstanceState) {       super.onCreate(savedInstanceState);       setContentView(R.layout.main);       // get the listview       expListView = (ExpandableListView) findViewById(R.id.lvExp);       // preparing list data       prepareListData();       listAdapter = new ExpandableListAdapter(this, listDataHeader, listDataChild);       // setting list adapter       expListView.setAdapter(listAdapter);       expListView.setOnChildClickListener(new OnChildClickListener() {           public boolean onChildClick(ExpandableListView parent, View v,                                       int groupPosition, int childPosition, long id) {               final String selected = (String) listAdapter.getChild(                       groupPosition, childPosition);               if(groupPosition==0 && childPosition==0){                   finish();                   startActivity(new Intent(MainActivity.this,page3.class));               }                   if (groupPosition==0 && childPosition==1){                       finish();                       startActivity(new Intent(MainActivity.this,page2.class));               }               if (groupPosition==1 && childPosition==0){                   finish();                   startActivity(new Intent(MainActivity.this,page2.class));               }               return true;}       });}   /*    * Preparing the list data    */   private void prepareListData() {       listDataHeader = new ArrayList();       listDataChild = new HashMap>();       // Adding child data       listDataHeader.add("Top 250");       listDataHeader.add("Now Showing");       listDataHeader.add("Coming Soon..");       // Adding child data       List top250 = new ArrayList();       top250.add("The Shawshank Redemption");       top250.add("The Godfather");       top250.add("The Godfather: Part II");       top250.add("Pulp Fiction");       top250.add("The Good, the Bad and the Ugly");       top250.add("The Dark Knight");       top250.add("12 Angry Men");       List nowShowing = new ArrayList();       List comingSoon = new ArrayList();       comingSoon.add("2 Guns");       comingSoon.add("The Smurfs 2");       comingSoon.add("The Spectacular Now");       comingSoon.add("The Canyons");       comingSoon.add("Europa Report");       listDataChild.put(listDataHeader.get(0), top250); // Header, Child data       listDataChild.put(listDataHeader.get(1), nowShowing);       listDataChild.put(listDataHeader.get(2), comingSoon);       expListView.setOnGroupClickListener(new OnGroupClickListener() {           @Override           public boolean onGroupClick(ExpandableListView arg0, View arg1, int arg2,                                       long arg3) {               // TODO Auto-generated method stub               final String selected = (String) listAdapter.getGroup(groupPosition);               if(groupPosition==0 ) {                   finish();                   startActivity(new Intent(MainActivity.this,page3.class));               return false;               }}});   }}

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

خسته نباشید 

میخواستم بدونم مشکل فراخوانی از دیتابیس و نمایش در expandlistview رو کار کردید 

سرپرست انجمن به عرضتون برسونم صندوق ورودی خصوصیتون پر شده و کاربری نمیتونه پیغام بده

مرسی

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای رفتن به اکتیویتی دیگه توی این نوع منو کد زیر بجای کد اکتیویتی قرار بدین

[shcode=java]

package com.p30droid.expandablelistview;

import java.util.ArrayList;

import java.util.HashMap;

import java.util.List;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

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;

 

public class MainActivity extends Activity {

 

    ExpandableListAdapter listAdapter;

    ExpandableListView expListView;

    List listDataHeader;

    HashMap> listDataChild;

 

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        // get the listview

        expListView = (ExpandableListView) findViewById(R.id.lvExp);

 

        // preparing list data

        prepareListData();

 

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

 

        // setting list adapter

        expListView.setAdapter(listAdapter);

        expListView.setOnChildClickListener(new OnChildClickListener() {

            

            public boolean onChildClick(ExpandableListView parent, View v,

                    int groupPosition, int childPosition, long id) {

                final String selected = (String) listAdapter.getChild(

                        groupPosition, childPosition);

//                Toast.makeText(getBaseContext(), selected, Toast.LENGTH_LONG)

//                        .show();

                finish();

                startActivity(new Intent(MainActivity.this,page2.class));

                return true;

            }

        });

    }

 

    /*

     * Preparing the list data

     */

    private void prepareListData() {

        listDataHeader = new ArrayList();

        listDataChild = new HashMap>();

 

        // Adding child data

        listDataHeader.add("Top 250");

        listDataHeader.add("Now Showing");

        listDataHeader.add("Coming Soon..");

 

        // Adding child data

        List top250 = new ArrayList();

        top250.add("The Shawshank Redemption");

        top250.add("The Godfather");

        top250.add("The Godfather: Part II");

        top250.add("Pulp Fiction");

        top250.add("The Good, the Bad and the Ugly");

        top250.add("The Dark Knight");

        top250.add("12 Angry Men");

 

        List nowShowing = new ArrayList();

        nowShowing.add("The Conjuring");

        nowShowing.add("Despicable Me 2");

        nowShowing.add("Turbo");

        nowShowing.add("Grown Ups 2");

        nowShowing.add("Red 2");

        nowShowing.add("The Wolverine");

 

        List comingSoon = new ArrayList();

        comingSoon.add("2 Guns");

        comingSoon.add("The Smurfs 2");

        comingSoon.add("The Spectacular Now");

        comingSoon.add("The Canyons");

        comingSoon.add("Europa Report");

 

        listDataChild.put(listDataHeader.get(0), top250); // Header, Child data

        listDataChild.put(listDataHeader.get(1), nowShowing);

        listDataChild.put(listDataHeader.get(2), comingSoon);

    }

}[/shcode]

برای تغییر ایکن لیست فایل زیر و توی پوشه دراویبل ایجاد کنین

[shcode=xml]<?xml version="1.0" encoding="utf-8"?>

   

          android:drawable="@drawable/down">

   

   

          android:drawable="@drawable/up">

   

[/shcode]

و دوتا ایکن برای حالت های بسته بودن منو و باز بودن اون توی پشوه دراویبل قرار بدین

و کد پایین و توی فایل activity_main.xml توی تگ ExpandableListView تایپ کنین

[shcode=xml]android:groupIndicator="@drawable/indicator"[/shcode]

خب تا اینجا ایکن لیست عوض شد و با کلیک روی هر ایتم میره صفحه بعد

حالا اگه میخوای بهش بگی هر ایتم توی یه اکتیویتی بره اینجوری کد و عوض کن

[shcode=java]        expListView.setOnChildClickListener(new OnChildClickListener() {

            

            public boolean onChildClick(ExpandableListView parent, View v,

                    int groupPosition, int childPosition, long id) {

                final String selected = (String) listAdapter.getChild(

                        groupPosition, childPosition);

                if(groupPosition==0 && childPosition==0){

                     finish();

                     startActivity(new Intent(MainActivity.this,page2.class));

                }

            

              

                return true;

            }

        });[/shcode]

اینجا من فقط بهش گفتم وقتی روی گروه اول که ایدیش 0 هست و فرزند اولش که ایدیش 0 هست کلیک شد بره اکتیویتی page2 رو اجرا کنه

برای بقیه هم میتونی if بذاری و ادامه بدی

یا اینکه عبارتی که روش کلیک شده رو توی شرط قرار بدی .ایتمی که کلیک میشه مقداری توی متغیر selected هست میتونی استفاده کنی


برای گروه هم میتونی قسمتی که گزینه های لیست هست و غیرفعال کنی مثل این

[shcode=java]List top250 = new ArrayList();

        /*top250.add("The Shawshank Redemption");

        top250.add("The Godfather");

        top250.add("The Godfather: Part II");

        top250.add("Pulp Fiction");

        top250.add("The Good, the Bad and the Ugly");

        top250.add("The Dark Knight");

        top250.add("12 Angry Men");*/[/shcode]

و کد زیر و برای کلیک روی گروه به برنامه اضافه کنی

[shcode=java] expListView.setOnGroupClickListener(new OnGroupClickListener() {

           

            @Override

            public boolean onGroupClick(ExpandableListView arg0, View arg1, int arg2,

                    long arg3) {

                // TODO Auto-generated method stub

                 Toast.makeText(getBaseContext(), "روی گروه کلیک شد", Toast.LENGTH_LONG)

                 .show();

                return false;

               

            }

        });[/shcode]

توی این قسمت هم میتونی بگی اگر ایدی گروه 0 بود چیکار کنه 1 بود چیکار و ...

کد شما اصلا کار نمیکنه !!!

این کد :

expListView.setOnChildClickListener(new OnChildClickListener() {

               

                public boolean onChildClick(ExpandableListView parent, View v,

                        int groupPosition, int childPosition, long id) {

                    final String selected = (String) listAdapter.getChild(

                            groupPosition, childPosition);

                    if(groupPosition==0 && childPosition==0){

                         finish();

                         startActivity(new Intent(MainActivity.this,page2.class));

                    }

               

                 

                    return true;

                }

            });

اصلا جواب نداد. هر کاری کردم فایده نداشت. به جای startActivity هم از Toast استفاده کردم یا هر دستوری که توی setOnChildClickListener گذاشتم اجرا نشد

وقتی روی Child ها کلیک می کنم هیچ اتفاقی نمیفته

چرا ؟؟؟؟؟؟؟

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام چطوری توی ایتم های پدر عکس قرار بدم؟

میتونید کدش رو بهم بگید؟

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام 

ببخشید بنده یه سوال داشتم

من میخواستم همین Expandable List View رو با json پر کنم اما موفق نمیشم ممکنه راهنماییم کنید؟

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

خسته نباشید

از آموزشتتون ممنونم,فقط یچیزی:اگر بخوایم با کلیک بر هر آیتم به یک وب ویو بره باید چه کدی رو اضافه کنیم

واقعا بهش احتیاج دارم لطفاراهنمایی بفرمائید.تشکر

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام 

ببخشید بنده یه سوال داشتم

من میخواستم همین Expandable List View رو با json پر کنم اما موفق نمیشم ممکنه راهنماییم کنید؟

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام مدیر جان

من ExpandableListView رو نوشتم ولی برای قسمت جستجو باید از چه کدی استفاده کنم؟لطفا راهنمایی بفرمائید،ممنون

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با سلام و خسته نباشید

خیلی ممنون بابت اموزش خوبی که گذاشتید خیلی بدردمون خورد

ی سوالی داشتم که یکی از این دوستان هم پرسیده بودن

اگه ما تعداد زیادی آیتم و زیر آیتم (پدر و فرزند) داشته باشیم چه روشی استفاده کنیم که بهتر باشه

ممنون از توجهی که نسبت به کاربرای سایت دارید:shy::shy:

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

با سلام مجدد

کدی که گذاشته بودید رو استفاده کردم و جواب هم داد

اگه من بخوام که یک key رو ارسال کنم به یک اکتیویتی دیگه و ازش استفاده کنم این کار رو با putExtra قبول نمیکنه

چ باید بکنم؟!

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

سلام

میشه کدتونو بذارین

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

درست شد!!! خییلی تعجبیه!

ولی ی سوال میخوام keyی که ارسال شده به اکتیویتی دیگه بره توی ی string بگرده اگه بود توی لیست ویو نمایش بده

مثلا

[shcode=java]

String[] book_topics={

            "Book1-collections",

            "Book2-muslims's_women",

            "Book3-Quranic_sciences",

            "Book4-speech",

            "Book5-history_of_hadith",

            "Book6-collections",

            "Book7-islam_&_other_religions",

            "Book8-Bibliography",

            "Book9-Special_Topics",

            "Book10-collections",

            "Book11-history",

                    };

String child=bun.getString("childposition");

[/shcode]

مثلا من collections رو کلیک کردم باید book1 رو برام توی لیست ویو نمایش بده

مرسی

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری