代码无法在spinner android中禁用项目

代码无法在spinner android中禁用项目,android,material-design,android-spinner,Android,Material Design,Android Spinner,国家/地区和城市的下拉列表: 我想在android中制作一个旋转器,就像这张附加的图片一样。例如,您选择列表,可以从国家/地区中选择任何城市。只有城市才可以单击,并且可以从列表中存储。国家/地区名称不应可单击。从微调器禁用某些项目时出现问题。 这是微调器的xml `<Spinner android:id="@+id/districtSpinner" android:layout_width="match_parent" android:l

国家/地区和城市的下拉列表:

我想在android中制作一个旋转器,就像这张附加的图片一样。例如,您选择列表,可以从国家/地区中选择任何城市。只有城市才可以单击,并且可以从列表中存储。国家/地区名称不应可单击。从微调器禁用某些项目时出现问题。 这是微调器的xml

 `<Spinner
        android:id="@+id/districtSpinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:hint="District"
        android:textSize="16sp"
        android:theme="@style/MyEditText"

      />`
``
这是代码:

`Spinner DistrictBetterSpinner;
 String[] District_Spinner = new String[]{"Punjab", "Rawalpindi", "Attock",      "Faisalabad", "Chakwal", "Bhakkar", "Jhelum", "Multan", "Chiniot"
        , "Bhawalpur", "Jhelum", "Gujrat", "Gujranwala", "Lahore", "Mianwali", "Khyber Pakhtunkhwa (KPK)", "Abbotabad", "Haripur", "Kohat",
        "Sindh", "Hyderabad", "Jacobabad", "Balochistan", "Awaran", "Gawadar", "Federally Administered Tribal Areas", "Khyber Agency",
        "Mohmat Agency", "Azad Jammu and Kashmir", "Neelum", "Bagh", "Gilgit Baltistan", "Skardu", "Astore"};
  List<String> spinnerlist;
  ArrayAdapter<String> arrayadapter;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_add_post); 
  DistrictBetterSpinner = (Spinner) findViewById(R.id.districtSpinner);
  spinnerlist = new ArrayList<>(Arrays.asList(District_Spinner));
  arrayadapter = new ArrayAdapter<String>(AddPostActivity.this, R.layout.spinner_item, spinnerlist);
  public boolean isEnabled(int position){
  if (position == 0 || position==1) {
  return false;
  } else {
  return true;
  }
  }

@Override
    public View getDropDownView ( int position, View convertView, ViewGroup parent){
        View view = super.getDropDownView(position, convertView, parent);
        TextView spinnerTextView = (TextView) view;
        if (position == 0) {
            // Set the disable item text color
            spinnerTextView.setTextColor(Color.BLACK);
        } else {
            spinnerTextView.setTextColor(Color.GRAY);
        }
        return view;
    }
}

;

 arrayadapter.setDropDownViewResource(R.layout.spinner_item);
DistrictBetterSpinner.setAdapter( arrayadapter);
`Spinner区Betterspinner;
String[]District_Spinner=新String[]{“旁遮普”、“拉瓦尔品第”、“阿托克”、“费萨拉巴德”、“查夸尔”、“巴卡尔”、“杰卢姆”、“木尔坦”、“吉尼奥特”
“Bhawalpur”、“Jhelum”、“Gujrat”、“Gujranwala”、“Lahore”、“Mianwali”、“Khyber-Pakhtunkhwa(KPK)”、“Abbotabad”、“Haripur”、“Kohat”,
“信德省”、“海得拉巴”、“雅各布巴德”、“俾路支省”、“阿瓦兰”、“加瓦达尔”、“联邦管理的部落地区”、“开伯尔省”,
“Mohmat机构”、“阿扎德查谟和克什米尔”、“尼伦”、“巴格”、“吉尔吉特巴尔的斯坦”、“斯卡杜”、“阿斯托尔”};
列表喷丝头列表;
ArrayAdapter ArrayAdapter;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u add\u post);
DistrictBetterSpinner=(微调器)findViewById(R.id.districtSpinner);
spinnerlist=新的ArrayList(Arrays.asList(District_Spinner));
arrayadapter=新的arrayadapter(AddPostActivity.this,R.layout.spinner_项,spinnerlist);
公共布尔值isEnabled(整型位置){
如果(位置==0 | |位置==1){
返回false;
}否则{
返回true;
}
}
@凌驾
公共视图getDropDownView(int位置、视图转换视图、视图组父视图){
视图=super.getDropDownView(位置、转换视图、父级);
TextView喷丝头TextView=(TextView)视图;
如果(位置==0){
//设置禁用项文本颜色
喷丝头textView.setTextColor(Color.BLACK);
}否则{
喷丝头textView.setTextColor(Color.GRAY);
}
返回视图;
}
}
;
arrayadapter.setDropDownViewResource(R.layout.spinner_项);
DistrictBetterSpinner.setAdapter(arrayadapter);

`我认为以下内容可能是您所追求的(将城市的
TextColor
设置为灰色后,在
getDropDownView
中添加了新行):-

另外,在我上面的评论中,我提到了
getView
作为替代方案。这不是因为这是选择视图而不是下拉列表(与
列表视图混为一谈了)

仔细查看您的答案和代码。我看你真的什么地方都没有。下面是一个基于您的代码的基本示例

首先,为下拉列表中的一个条目创建一个新的布局文件(我也做了一些欺骗,并将其用于所选条目,每个条目可能有一个单独的布局)。这是微调器\u item.xml:-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/spinnerTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.Toast;

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

/**
 * Created by Mike092015 on 31/10/2016.
 */
public class MyArrayAdapter extends ArrayAdapter<String> {

    private Context context;
    private TextView district;
    private ArrayList<String> districts;

    public MyArrayAdapter(Activity context, int layout, ArrayList<String> districts) {
        super(context, layout, districts);
        this.context = context;
        this.districts = districts;
    }

    @Override
    public View getDropDownView(int position, View convertview, ViewGroup parent) {

        View v = convertview;
        if (v == null) {
            v = LayoutInflater.from(this.context).inflate(R.layout.spinner_item,parent,false);
        }
        district = (TextView) v.findViewById(R.id.spinnerTextView);
        district.setText(districts.get(position));
        district.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,"You clicked me",Toast.LENGTH_SHORT).show();
            }
        });
        return v;
    }

    public View getView(int position, View convertview, ViewGroup parent) {
        View v = convertview;
        if (v == null) {
            v = LayoutInflater.from(this.context).inflate(R.layout.spinner_item,parent,false);
        }
        district = (TextView) v.findViewById(R.id.spinnerTextView);
        district.setText(districts.get(position));
        return v;
    }
}
最后是活动,为了测试这一点,我使用了MainActivity,因此MainActivity.java是:-

导入android.os.Bundle; 导入android.support.v7.app.AppActivity; 导入android.widget.Spinner

导入java.util.ArrayList; 导入java.util.array

/** *由MIKE09215于2016年6月3日创建。 */ 公共类MainActivity扩展了AppCompatActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Spinner DistrictBetterSpinner;
    String[] District_Spinner = new String[]{"Punjab", "Rawalpindi", "Attock", "Faisalabad", "Chakwal", "Bhakkar", "Jhelum", "Multan", "Chiniot"
            , "Bhawalpur", "Jhelum", "Gujrat", "Gujranwala", "Lahore", "Mianwali", "Khyber Pakhtunkhwa (KPK)", "Abbotabad", "Haripur", "Kohat",
            "Sindh", "Hyderabad", "Jacobabad", "Balochistan", "Awaran", "Gawadar", "Federally Administered Tribal Areas", "Khyber Agency",
            "Mohmat Agency", "Azad Jammu and Kashmir", "Neelum", "Bagh", "Gilgit Baltistan", "Skardu", "Astore"};
    ArrayList<String> spinnerlist;
    MyArrayAdapter arrayadapter;

    DistrictBetterSpinner = (Spinner) findViewById(R.id.districtSpinner);
    spinnerlist = new ArrayList<>(Arrays.asList(District_Spinner));
    arrayadapter = new MyArrayAdapter(this,R.layout.spinner_item,spinnerlist);
    arrayadapter.setDropDownViewResource(R.layout.spinner_item);
    DistrictBetterSpinner.setAdapter(arrayadapter);
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
纺纱区;
String[]District_Spinner=新String[]{“旁遮普”、“拉瓦尔品第”、“阿托克”、“费萨拉巴德”、“查夸尔”、“巴卡尔”、“杰卢姆”、“木尔坦”、“吉尼奥特”
“Bhawalpur”、“Jhelum”、“Gujrat”、“Gujranwala”、“Lahore”、“Mianwali”、“Khyber-Pakhtunkhwa(KPK)”、“Abbotabad”、“Haripur”、“Kohat”,
“信德省”、“海得拉巴”、“雅各布巴德”、“俾路支省”、“阿瓦兰”、“加瓦达尔”、“联邦管理的部落地区”、“开伯尔省”,
“Mohmat机构”、“阿扎德查谟和克什米尔”、“尼伦”、“巴格”、“吉尔吉特巴尔的斯坦”、“斯卡杜”、“阿斯托尔”};
ArrayList喷丝板;
MyArrayAdapter arrayadapter;
DistrictBetterSpinner=(微调器)findViewById(R.id.districtSpinner);
spinnerlist=新的ArrayList(Arrays.asList(District_Spinner));
arrayadapter=新的MyArrayAdapter(此,R.layout.spinner_项,spinnerlist);
arrayadapter.setDropDownViewResource(R.layout.spinner_项);
DistrictBetterSpinner.setAdapter(arrayadapter);
}
}


注意有一些变化,但很大程度上取决于您的代码。

我认为以下可能是您所追求的(在您将城市的
TextColor
设置为灰色后,在
getDropDownView
中添加了新行):-

另外,在我上面的评论中,我提到了
getView
作为替代方案。这不是因为这是选择视图而不是下拉列表(与
列表视图混为一谈了)

仔细查看您的答案和代码。我看你真的什么地方都没有。下面是一个基于您的代码的基本示例

首先,为下拉列表中的一个条目创建一个新的布局文件(我也做了一些欺骗,并将其用于所选条目,每个条目可能有一个单独的布局)。这是微调器\u item.xml:-

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">
    <TextView
        android:id="@+id/spinnerTextView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
</LinearLayout>
import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.Toast;

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

/**
 * Created by Mike092015 on 31/10/2016.
 */
public class MyArrayAdapter extends ArrayAdapter<String> {

    private Context context;
    private TextView district;
    private ArrayList<String> districts;

    public MyArrayAdapter(Activity context, int layout, ArrayList<String> districts) {
        super(context, layout, districts);
        this.context = context;
        this.districts = districts;
    }

    @Override
    public View getDropDownView(int position, View convertview, ViewGroup parent) {

        View v = convertview;
        if (v == null) {
            v = LayoutInflater.from(this.context).inflate(R.layout.spinner_item,parent,false);
        }
        district = (TextView) v.findViewById(R.id.spinnerTextView);
        district.setText(districts.get(position));
        district.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,"You clicked me",Toast.LENGTH_SHORT).show();
            }
        });
        return v;
    }

    public View getView(int position, View convertview, ViewGroup parent) {
        View v = convertview;
        if (v == null) {
            v = LayoutInflater.from(this.context).inflate(R.layout.spinner_item,parent,false);
        }
        district = (TextView) v.findViewById(R.id.spinnerTextView);
        district.setText(districts.get(position));
        return v;
    }
}
最后是活动,为了测试这一点,我使用了MainActivity,因此MainActivity.java是:-

导入android.os.Bundle; 导入android.support.v7.app.AppActivity; 导入android.widget.Spinner

导入java.util.ArrayList; 导入java.util.array

/** *由MIKE09215于2016年6月3日创建。 */ 公共类MainActivity扩展了AppCompatActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    Spinner DistrictBetterSpinner;
    String[] District_Spinner = new String[]{"Punjab", "Rawalpindi", "Attock", "Faisalabad", "Chakwal", "Bhakkar", "Jhelum", "Multan", "Chiniot"
            , "Bhawalpur", "Jhelum", "Gujrat", "Gujranwala", "Lahore", "Mianwali", "Khyber Pakhtunkhwa (KPK)", "Abbotabad", "Haripur", "Kohat",
            "Sindh", "Hyderabad", "Jacobabad", "Balochistan", "Awaran", "Gawadar", "Federally Administered Tribal Areas", "Khyber Agency",
            "Mohmat Agency", "Azad Jammu and Kashmir", "Neelum", "Bagh", "Gilgit Baltistan", "Skardu", "Astore"};
    ArrayList<String> spinnerlist;
    MyArrayAdapter arrayadapter;

    DistrictBetterSpinner = (Spinner) findViewById(R.id.districtSpinner);
    spinnerlist = new ArrayList<>(Arrays.asList(District_Spinner));
    arrayadapter = new MyArrayAdapter(this,R.layout.spinner_item,spinnerlist);
    arrayadapter.setDropDownViewResource(R.layout.spinner_item);
    DistrictBetterSpinner.setAdapter(arrayadapter);
}
@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
纺纱区;
字符串[]地区\旋转器=新字符串[]{“旁遮普”、“拉瓦尔品第”、“阿托克”、“费萨拉巴德”、“查夸尔”、“巴卡尔”、“J