在下拉菜单中选择实现自定义Spinner

时间:2015-01-16 09:48:32

标签: java android

我有一个任务来实现显示的Spinner,当您从下拉列表中选择具有完整名称的国家/地区时,必须在所选的Spinner项目上显示其国家/地区代码(GB,AU ...)。我不知道如何像这样实现它。只是做一些提示会很棒。关心所有人。

enter image description here

3 个答案:

答案 0 :(得分:1)

您无法使用Spinner创建完全相同的尖头弹出式菜单! 您必须使用某些库,例如this

OR

你可以扩展PopupWindow课程并乱用它。

答案 1 :(得分:1)

要做到这一点,你需要有一个自定义微调器适配器和一个自定义类来保存这两个变量。

创建一个类,其中包含您要显示的每个项目的名称和国家/地区代码。

这样的事情:

public class Country {
    public name;
    public code;
}

使用您选择的适配器进行微调器。我建议BaseAdapter

覆盖适配器上的getViewgetDropdownView。所有适配器都有这些方法。

getView方法将确定微调器关闭后显示的内容,因此您可以在此处将TextView的文本设置为所选项目的国家/地区代码。

在getDropDownView上,您将根据每个选项的位置将其设置为您要显示的国家/地区的名称。

下面你可以找到一个最小的适配器,它将完成我上面描述的操作。

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

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

public class CountryAdapter extends BaseAdapter {

private List<Country> countryList;

public CountryAdapter() {
    //Initialize the list however you need to.
    countryList = new ArrayList<>();
}

@Override
public int getCount() {
    return countryList.size();
}

@Override
public Object getItem(int position) {
    return countryList.get(position);
}

@Override
public long getItemId(int position) {
    return 0;
}

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

@Override
public View getView(int position, View view, ViewGroup parent) {
    Context context = parent.getContext();
    if (view == null || !view.getTag().toString().equals("NON_DROPDOWN")) {
        view = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.spinner_item, parent, false);
        view.setTag("NON_DROPDOWN");
    }

    String countryCode = countryList.get(position).code;
    //Here you can set the label to the country code.

    return view;
}

@Override
public View getDropDownView(int position, View view, ViewGroup parent) {
    Context context = parent.getContext();
    if (view == null || !view.getTag().toString().equals("DROPDOWN")) {
        view = ((LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE)).inflate(R.layout.spinner_item_dropdown,
                parent, false);
        view.setTag("DROPDOWN");
    }

    String countryName = countryList.get(position).name;
    //Here you set the text of your label to the name of the country.

    return view;
}

private class Country {

    public String name;
    public String code;
}

}

答案 2 :(得分:0)

string.xml中首先声明数组中的所有国家/地区列表

<string-array name="countries">
    <item>India</item>
    <item>Australia</item>
    <item>England</item>
    <item>Pakistan</item>
</string-array>

然后在布局中声明微调器

<Spinner
    android:id="@+id/spinnerPlayerType"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:entries="@array/countries"        
    android:focusable="false" />