2016-09-06 68 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) { 

    } 

}); 
相关问题