نمایش ListView به صورت آبشاری (dropdown) درAndroid

سه شنبه 5 آبان 1394

در این مقاله می خواهیم یاد بگیریم که چگونه می توان با یک دکمه یک ListView آبشاری ایجاد کنیم و با زدن آن ListView باز و بسته شود.

نمایش ListView به صورت آبشاری (dropdown) درAndroid

ابتدا داخل فایل xml خود باید قطعه کد زیر را بنویسید به صورت زیر:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:tools="http://schemas.android.com/tools"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                tools:context=".MainActivity" >

    <Button
            android:id="@+id/buttonShowDropDown"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_centerVertical="true"
            android:text="نمایش لیست ویو به صورت آبشاری" />

</RelativeLayout>

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

حالا کلاس جاوای خود را می نویسیم:

import java.util.ArrayList;  
import java.util.List;  
   
import android.os.Bundle;  
import android.view.View;  
import android.view.ViewGroup;  
import android.view.WindowManager;  
import android.widget.ArrayAdapter;  
import android.widget.Button;  
import android.widget.ListView;  
import android.widget.PopupWindow;  
import android.widget.TextView;  
import android.app.Activity;  
import android.graphics.Color;  
   
public class MainActivity extends Activity {  
   
    String TAG = "MainActivity.java";  
   
    String popUpContents[];  
    PopupWindow popupWindowDogs;  
    Button buttonShowDropDown;  
   
    @Override  
    protected void onCreate(Bundle savedInstanceState) {  
           
        super.onCreate(savedInstanceState);  
        setContentView(R.layout.activity_main);  
   
        // initialize pop up window items list  
           
        // add items on the array dynamically  
        // format is DogName::DogID  
        List<String> dogsList = new ArrayList<String>();  
        dogsList.add("Akita Inu::1");  
        dogsList.add("Alaskan Klee Kai::2");  
        dogsList.add("Papillon::3");  
        dogsList.add("Tibetan Spaniel::4");  
   
        // convert to simple array  
        popUpContents = new String[dogsList.size()];  
        dogsList.toArray(popUpContents);  
   
           
        // initialize pop up window  
        popupWindowDogs = popupWindowDogs();  
   
           
        // button on click listener  
           
        View.OnClickListener handler = new View.OnClickListener() {  
            public void onClick(View v) {                                                                                                                                                                                                                                                                                                   
   
                switch (v.getId()) {  
   
                case R.id.buttonShowDropDown:  
                    // show the list view as dropdown  
                    popupWindowDogs.showAsDropDown(v, -5, 0);  
                    break;  
                }  
            }  
        };  
   
        // our button  
        buttonShowDropDown = (Button) findViewById(R.id.buttonShowDropDown);  
        buttonShowDropDown.setOnClickListener(handler);  
    }  
   
    public PopupWindow popupWindowDogs() {  
   
        // initialize a pop up window type  
        PopupWindow popupWindow = new PopupWindow(this);  
   
        // the drop down list is a list view  
        ListView listViewDogs = new ListView(this);  
           
        // set our adapter and pass our pop up window contents  
        listViewDogs.setAdapter(dogsAdapter(popUpContents));  
           
        // set the item click listener  
        listViewDogs.setOnItemClickListener(new DogsDropdownOnItemClickListener());  
   
        // some other visual settings  
        popupWindow.setFocusable(true);  
        popupWindow.setWidth(250);  
        popupWindow.setHeight(WindowManager.LayoutParams.WRAP_CONTENT);  
           
        // set the list view as pop up window content  
        popupWindow.setContentView(listViewDogs);  
   
        return popupWindow;  
    }  
   
    /* 
     * adapter where the list values will be set 
     */  
    private ArrayAdapter<String> dogsAdapter(String dogsArray[]) {  
   
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, dogsArray) {  
   
            @Override  
            public View getView(int position, View convertView, ViewGroup parent) {  
   
                // setting the ID and text for every items in the list  
                String item = getItem(position);  
                String[] itemArr = item.split("::");  
                String text = itemArr[0];  
                String id = itemArr[1];  
   
                // visual settings for the list item  
                TextView listItem = new TextView(MainActivity.this);  
   
                listItem.setText(text);  
                listItem.setTag(id);  
                listItem.setTextSize(22);  
                listItem.setPadding(10, 10, 10, 10);  
                listItem.setTextColor(Color.WHITE);  
                   
                return listItem;  
            }  
        };  
           
        return adapter;  
    }  
}  

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

دکمه ی مورد نظر را تعریف کردن و برای آن رویداد SetOnClickListner تعریف می کنید، قرار است با زدن دکمه لیست ویو به صورت آبشاری یا DropDown باز و بسته شود

از یک متد به نام Popupwindow استفاده می کنید، و یک لیست ویو که با adapter پر شده است تعریف می نمایید.

حالا  کلاس DogsDropdownOnItemClickListener:

import android.content.Context;  
import android.view.View;  
import android.view.animation.Animation;  
import android.view.animation.AnimationUtils;  
import android.widget.AdapterView;  
import android.widget.Toast;  
import android.widget.AdapterView.OnItemClickListener;  
import android.widget.TextView;  
   
public class DogsDropdownOnItemClickListener implements OnItemClickListener {  
   
    String TAG = "DogsDropdownOnItemClickListener.java";  
       
    @Override  
    public void onItemClick(AdapterView<?> arg0, View v, int arg2, long arg3) {  
   
        // get the context and main activity to access variables  
        Context mContext = v.getContext();  
        MainActivity mainActivity = ((MainActivity) mContext);  
           
        // add some animation when a list item was clicked  
        Animation fadeInAnimation = AnimationUtils.loadAnimation(v.getContext(), android.R.anim.fade_in);  
        fadeInAnimation.setDuration(10);  
        v.startAnimation(fadeInAnimation);  
           
        // dismiss the pop up  
        mainActivity.popupWindowDogs.dismiss();  
           
        // get the text and set it as the button text  
        String selectedItemText = ((TextView) v).getText().toString();  
        mainActivity.buttonShowDropDown.setText(selectedItemText);  
           
        // get the id  
        String selectedItemTag = ((TextView) v).getTag().toString();  
        Toast.makeText(mContext, "Dog ID is: " + selectedItemTag, Toast.LENGTH_SHORT).show();  
           
    }  
   
}  

کلاس بالا انیمیشن و زمان انمیشن (popup) است، که با انتخاب کردن هر کدام از این بخش های لیست ویو یک id به صورت toast نمایش داده می شود.

فایل های ضمیمه

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید