2016-10-29 45 views
1

下拉列表中的国家和城市:代码不工作在微调器禁用物品的Android

Dropdown list for country and city

我想在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); 

`

+1

不太确定你的问题是什么。请添加额外的细节并澄清问题。谢谢! –

+0

我想让一些项目可点击并且有些不可点击。例如国家名称应该不可点击,但城市名称应该可点击 – Sara

+0

我已编辑并提出问题。请看一看。 – Sara

回答

0

我认为有以下可能是你所追求的(新行添加到getDropDownView您设置的TextColor的城市为灰色后): -

@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); 
      spinnerTextView.setOnclickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        //YOUR ONCLICK HANDLING CODE HERE 
       } 
      }); 
     } 
     return view; 
    } 

PS在我上面的评论中,我提到了getView作为替代方案。这不是选择视图,而是下拉菜单(与ListViews混淆)。

仔细查看您的答案和代码。我看到你真的没有任何地方。所以这里有一个基于你的代码的基本例子。

首先在下拉列表中输入一个新的布局文件(我也欺骗了一点,用于选定的条目,您可能每个都有单独的布局)。这是spinner_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> 

当你想定制功能你应该有一个自定义适配器(这是你出现在你的代码中attemtping什么)。适配器处理将数据(您的案例中的arrayList)放入微调器使用的视图中(使用的术语是充气)。所以这里是我放入它自己的文件中的自定义适配器。这是MyArrayAdapter.java: -

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; 
    } 
} 

注意在getDropDownViewonClickListener这是你捕捉和处理条目的点击(在这种情况下,它只是发出一个敬酒)。

activity_main.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:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:text="Testing"/> 
    <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" 
     /> 
</LinearLayout> 

最后的活动,来测试这个我用MainActivity,所以MainActicity.java是: -

import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.widget.Spinner;

import java.util.ArrayList; import java.util。阵列;

/** *由Mike092015于2016年3月6日创建。 */ 公共类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); 
} 

}

注也有一些变化,但它是非常根据你的代码。

+0

我也试过这个代码,它仍然没有工作。 – Sara