رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

پست های پیشنهاد شده

از 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]

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 5 ماه بعد...

سلام

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

یک چیز کم داره، می خوایم یک لیست زیر شاخه کلیک کنیم تا بیاد صفحه دیگه یا 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]

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

[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  فرق می کنه

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 4 ماه بعد...

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

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

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

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

مرسی

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

اگه اموزش ها رو دیده باشی لیست ویو سفارشی هست توشون.اینم مثل همونه خودمون میایم فایل 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

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

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

[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;               }}});   }}
لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 2 هفته بعد...

سلام

خسته نباشید 

میخواستم بدونم مشکل فراخوانی از دیتابیس و نمایش در 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 ها کلیک می کنم هیچ اتفاقی نمیفته

چرا ؟؟؟؟؟؟؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 1 ماه بعد...
  • 4 ماه بعد...

سلام 

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

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

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

سلام

خسته نباشید

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

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

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

سلام 

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

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 2 هفته بعد...

سلام مدیر جان

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

لینک ارسال
به اشتراک گذاری در سایت های دیگر
  • 3 ماه بعد...

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

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

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

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

ممنون از توجهی که نسبت به کاربرای سایت دارید: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 رو برام توی لیست ویو نمایش بده

مرسی

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

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...