以编程方式设置微调器选择

时间:2016-08-17 14:43:00

标签: android xml android-layout

我在设置微调器选择时遇到问题。这是我在做的事情: 我有一个XML,其中有一个按钮和一个填充了国家/地区名称的微调器。我没有使用适配器填充微调器,而是在values文件夹中的字符串文件中命名了一个数组,该文件夹有很多项目作为国家/地区名称。现在选择一个国家,我可以选择英格兰,然后点击按钮。点击一个新活动就是开始,它也有一个微调器,它以相同的方式填充相同的列表。但我想要的是第二个活动微调器应该显示所选的国家,在这种情况下是英格兰作为旋转器中的当前项目。 但我无法解决它。 这是我所做的一段代码

//第一个活动XML

<Spinner
   android:id="@+id/spinner1"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:entries="@array/sehirler"
   android:prompt="@string/sehirsec" />

//第二个活动XML

<Spinner
   android:id="@+id/spinner2"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:entries="@array/sehirler"
   android:prompt="@string/sehirsec" />

//第一活动代码

spinner = (Spinner)findViewById(R.id.spinner1);

button.setOnClickListener(new OnClickListener() { 
    @Override
    public void onClick(View arg0) {
        spinnerItem = spinner .getSelectedItem().toString();

        Intent intent = new Intent(firstactivity.this, secondactivty.class); 
        intent.putExtra("name", spinnerItem);
        startActivity(intent);
    }
}); 

//第二个活动代码

sehir = (Spinner)findViewById(R.id.spinner2);
Intent intent = getIntent();
String name2 = intent.getExtras().getString("name");

sehir.setSelection(getIndex(sehir, name2));

private int getIndex(Spinner spinner, String myString) {
    int index = 0;

    for (int i=0;i<spinner.getCount();i++) {
        if (spinner.getItemAtPosition(i).equals(myString)) {
           index = i;
        }
    }
        return index;
    }
}

1 个答案:

答案 0 :(得分:1)

您的spinner2似乎不在第二个活动中,而是在完全不同的布局中。检查并查看是否有适配器。如果您有自定义适配器,则必须将该位置值传递给自定义适配器的构造函数。

在第二个活动中,将位置值传递给CustomAdapter构造函数:

Intent intent = getIntent();
position = intent.getIntExtra("position", 0);

CustomAdapter jsonCustomAdapter = new CustomAdapter(SecondActivity.this, list, position);

在CustomAdapter中,将其设置如下:

public class CustomAdapter extends BaseAdapter {

    private LayoutInflater inflater;
    private List<ItemObject> list;
    private int spinnerPosition;

    public CustomAdapter(Context context, List<ItemObject> list, int position) {
        inflater =(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        this.list = list;
        spinnerPosition = position;
    }

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

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

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

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        ViewHolder listViewHolder;
        if(convertView == null){
            listViewHolder = new ViewHolder();
            convertView = inflater.inflate(R.layout.list, parent, false);
            listViewHolder.spinner = (Spinner)convertView.findViewById(R.id.spinner2);
            convertView.setTag(listViewHolder);
        } else {
           listViewHolder = (ViewHolder)convertView.getTag();
        }

        listViewHolder.spinner.setSelection(spinnerPosition);
        return convertView;
    }

    static class ViewHolder{
        Spinner spinner;
    }
}