根据Android中的微调器选择更新ListView

时间:2016-09-06 06:37:23

标签: java listview android-arrayadapter android-spinner

我知道这已被问了一百万次,但我想知道是否有人可以指出我正确的方向。

在android中创建微调器并根据微调器选择更改Listview内容的最佳方法是什么? (我基本上只需要在两个列表视图之间来回)

如果有人能够逐步描述这个过程,我不知道如何开始,我只能设法创建一个listview和一个数组适配器,但我不知道如何将它链接到微调器,所以当我从微调器中选择一个选项时,列表视图会发生变化。

2 个答案:

答案 0 :(得分:1)

静态数据。

1.创建一个ArrayList。

List lmonth=new ArrayList();

2.Populate arraylist。

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.现在根据需要创建一个Model类。

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

}

这可能对你有帮助。

答案 1 :(得分: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) {

    }

});