2016-09-06 28 views
1

これは何百万回も尋ねられましたが、誰かが正しい方向に私を指摘できるかどうか疑問に思っていました。リストリストをAndroidのスピナー選択に基づいて更新する

アンドロイドでスピナーを作成し、スピナーの選択に基づいてリストビューのコンテンツを変更するには、どのような方法が最適ですか? (私は基本的に2つのリストビューの間を行き来する必要があります)

誰かがステップごとにプロセスを記述できるのであれば、私はどのように始めたらいいのかわかりません、私はリストビューとarrayadapterしかし私はスピナーにリンクする方法を知らないので、私はスピナーからオプションを選択すると、リストビューが変更されます。

+0

スピナーに選択リスナーがあります。これはおそらく、データのニーズが変化したことを通知する「最良の」方法です。試したことを示すために[編集]をして、それを実装する上での難しさを説明してください –

+0

[Android Spinner:選択したアイテムの変更イベントを取得する](http://stackoverflow.com/questions/1337424/) android-spinner-get-the-selected-item-change-event) –

答えて

1

静的データの場合。

1. ArrayListを作成します。

List lmonth=new ArrayList(); 

2集団。

lmonth.add("0");lmonth.add("1");lmonth.add("2");lmonth.add("3");lmonth.add("4");lmonth.add("5");lmonth.add("6");lmonth.add("7");lmonth.add("8");lmonth.add("9"); 
     lmonth.add("10");lmonth.add("11"); 

3.アダプタの作成とアダプタへのリストの追加。

ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, lmonth); 
     dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

4.アダプタをスピナーに設定します。

Spinner month=(Spinner)findViewById(R.id.spinnermonth); 

month.setAdapter(dataAdapters); 

これは静的データとスピナーを移入する方法..です動的なデータについては

1.アダプタを作成します。

public class SpinnerCustomAdapter extends BaseAdapter { 
    private Context mContext; 
    private List<JobSearchModel> mList=new ArrayList<JobSearchModel>(); 
    private LayoutInflater mLayoutInflater; 
    private String mType=null; 


    public SpinnerCustomAdapter(Context mContext, List<JobSearchModel> list) { 
     this.mContext=mContext; 
     this.mList=list; 

    } 


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

    @Override 
    public Object getItem(int i) { 
     return i; 
    } 

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

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     ViewHolder holder=null; 
     LayoutInflater layoutInflater=(LayoutInflater)mContext.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 
     if(convertView==null){ 
      convertView = layoutInflater.inflate(R.layout.layout_spinner, null); 
      holder = new ViewHolder(); 
      holder.textView2=(TextView)convertView.findViewById(R.id.txt_text2); 
      convertView.setTag(holder); 

     } 
     else { 
      holder = (ViewHolder) convertView.getTag(); 
     } 
     JobSearchModel classModel=mList.get(position); 
     String id = mList.get(position).getId(); 
     if(id.equals("select")){ 
      holder.textView2.setTextColor(mContext.getResources().getColor(R.color.lightblack)); 
     }else{ 
      holder.textView2.setTextColor(mContext.getResources().getColor(R.color.black)); 
     } 
     holder.textView2.setText(classModel.getDescription()); 
     return convertView; 
    } 
    static class ViewHolder{ 

     TextView textView2; 
    } 
} 

アダプタのために必要なXMLは

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/txt_text2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Dami" 
     android:textSize="14sp" 
    android:layout_marginLeft="5dp" 
     android:textColor="#4E4E4E" 
     android:layout_marginTop="5dp" 
     android:layout_marginBottom="5dp" 

     /> 
    <View 
     android:layout_width="match_parent" 
     android:layout_height="1dp" 

     /> 
</LinearLayout> 

3.Nowニーズに応じてモデルクラスを作成しています。

public class Model { 
    private String id; 
    private String description; 
    public char[] name; 

    public Model() 
    { 

    } 
    public Model (String id, String description) { 
     this.id = id; 
     this.description = description; 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    @Override 
    public String toString() { 
     final StringBuilder sb = new StringBuilder(); 
     sb.append(String.format("%02d", id)).append(" - ").append(description); 
     return sb.toString(); 
    } 

} 

4.ここではメインクラスです。

i)Arayylistを作成します。

private List<Model> mList = new ArrayList<Model>(); 

ii)スピナーを初期化して定義します。

Spinner loc = (Spinner) findViewById(R.id.sp_loc); 

iii)SpinnerのOnItemSelectedListenerを設定します。

loc.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
      @Override 
      public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) { 


      } 

      @Override 
      public void onNothingSelected(AdapterView<?> adapterView) { 

      } 
     }); 

ダイナミックデータをスピンナに入力します。 例:コードを以下に示す。

private void Parsing(JsonParser jsonParser) { 
    Log.i(">>>ClassResponseloc", "" + jsonParser); 
    mList = new ArrayList<Model>(); 
    Model classModel = null; 

    try { 
     while (jsonParser.nextToken() != JsonToken.END_ARRAY) { 
      classModel = new JobSearchModel(); 
      while (jsonParser.nextToken() != JsonToken.END_OBJECT) { 
       String fieldName = jsonParser.getCurrentName(); 
       if ("id".equals(fieldName)) { 
        jsonParser.nextToken(); 
        classModel.setId((jsonParser.getText()) + "-"); 
       } else if ("name".equals(fieldName)) { 
        jsonParser.nextToken(); 
        classModel.setDescription(jsonParser.getText()); 
       } 
      } 

      mList.add(classModel); 

     } 

     SpinnerCustomAdapter adapter = new SpinnerCustomAdapter(this, mList); 
     loc.setAdapter(adapter); 

    } catch (JsonParseException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

} 

+0

これは私が探しているものであることを確認していないので、少し具体的にしてください。 私は2つのリストビューを持っていると言うことができます 1-新しい車 2-古い車。 私は2つのarraylistsを作成し、それぞれの情報を入力してから2つのArrayadaptersを作成し、次に3番目のステップでスピナーにアダプタを設定する必要がありますか? – DavidNy

+0

あなたは2人のarraylistを作成する必要があります。2人のadpatersは必要ありません。 –

+0

はい、まさに私が必要なものです.2人のarraylistsに同じアダプタを使用する方法の例を示してもらえますか? – DavidNy

0
spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { 
     String selectedItem = parentView.getItemAtPosition(position); 
     //based on selectedItem value decide what kind of data 
     //you want to populate in your ListView and prepare adapter 
     yourAdapter.notifyDataSetChanged(); 
    } 

    @Override 
    public void onNothingSelected(AdapterView<?> parentView) { 

    } 

}); 
関連する問題