2016-10-29 9 views
1

ドロップダウンリストの項目を無効にするには働いていない:コードは、国や都市のためのスピナーアンドロイド

Dropdown list for country and city

私はちょうどこの添付画像のようなアンドロイドでスピナーを作りたいです。たとえば、リストを選択すると、国から任意の都市を選択できます。都市のみをクリック可能にして、リストから格納することができます。国名はクリック可能ではありません。スピナーからアイテムの一部を無効にする際に問題があります。 これはスピナーの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

私は次のようにあなたが都市のTextColorを設定した後(新しい行が灰色にgetDropDownViewに追加した後、あなたが何であるかかもしれないと思います): -

@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と混同しています)。

あなたの回答とコードを詳しく見てください。あなたは本当にどこにもいないことがわかります。ここでは、コードに基づいた初歩的な例があります。

最初に、ドロップダウンリストのエントリの新しいレイアウトファイル()を使用して、選択したエントリにこれを使用しました。おそらく、それぞれの個別のレイアウトがあります。あなたはおそらく、(あなたのコードでattemtpingしているように見えたものです)カスタムアダプタを持っている必要があり、カスタマイズ機能を利用すると

<?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> 

- :これはspinner_item.xmlです。アダプタは、スピナーによって使用されたビューにデータ(配列のリスト)を配置することを処理します(使用される用語は膨張します)。だからここに私は自分のファイルに配置しているカスタムアダプタです。これは、(この場合には、それだけでトーストを発行)どこがエントリーのクリックをキャッチし、取り扱うです

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 - :これはMyArrayAdapter.javaです。そう、私はMainActivityを使用していたこれをテストする

<?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> 

最後の活動、 - :

activity_main.xml(スピナーを含み、レイアウト、少し、あなたのレイアウトから任意の異なる場合)がありますMainActicity.javaは: -

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

import java.util.ArrayList; import java.util。アレイ;

/** * 3/06/2016にMike092015によって作成されました。 */ パブリッククラス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

関連する問題