2016-09-06 98 views
1

我知道這已被問及一百萬次,但我想知道是否有人可以指出我在正確的方向。更新列表視圖基於Android中的微調選擇

什麼是在android中創建一個微調器並根據微調器選擇更改Listview內容的最佳方法? (我基本上只需要去往返於兩座列表視圖之間)

這將會是巨大的,如果有人能描述一步的工藝步驟,我不知道如何開始,我只成功地創建一個列表視圖和arrayadapter,但我不知道如何將其鏈接到微調,所以當我從微調選擇一個選項的ListView更改。

+0

微調器有一個選擇監聽器。這可能是通知數據需求發生變化的「最佳」方式。請執行[編輯]以顯示您嘗試過的內容,並描述執行該操作時遇到的困難 –

+0

[Android微調:獲取所選項目更改事件]的可能重複(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.現在在Main類中。

i)創建Arayylist。

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

ii)初始化並定義微調器。

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

iii)爲微調器設置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

不確定這是我正在尋找的,所以讓我更具體一點。 可以說我有兩個listviews 1-新車 2-舊車。 我必須創建兩個陣列列表並填充每個我想要的信息,然後創建兩個ArrayAdapter,然後第三步將適配器設置爲微調器? – DavidNy

+0

你必須創建2 arraylist,不需要兩個adpaters,你可以簡單地再次使用一個適配器,只需更改數組列表名稱。 –

+0

是的,這正是我所需要的,你會介意如何使用同一個適配器用於兩個數組列表的示例嗎? – 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) { 

    } 

});