Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 以编程方式设置微调器选择_Android_Xml_Android Layout - Fatal编程技术网

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

Android 以编程方式设置微调器选择,android,xml,android-layout,Android,Xml,Android Layout,我在设置微调器选择时遇到问题。以下是我正在做的: 我有一个XML,其中有一个按钮和一个用国家名称填充的微调器。我没有使用适配器填充微调器,而是在values文件夹中的字符串文件中命名了一个数组,其中有许多项作为国家名称。现在,在选择一个国家时,让我们假设我选择英格兰并点击按钮。单击一个新的“活动”即开始,该活动还具有一个微调器,该微调器以相同的方式填充相同的列表。但是我想要的是,第二个活动微调器应该显示选定的国家,在本例中是英格兰,作为微调器中的当前项。 但我不能解决它。 下面是我所做的一段代码

我在设置微调器选择时遇到问题。以下是我正在做的: 我有一个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" />
<Spinner
   android:id="@+id/spinner2"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:entries="@array/sehirler"
   android:prompt="@string/sehirsec" />
//第二个活动代码

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;
    }
}
sehir=(微调器)findviewbyd(R.id.spinner2);
Intent=getIntent();
字符串名称2=intent.getExtras().getString(“名称”);
sehir.setSelection(getIndex(sehir,name2));
private int getIndex(微调器微调器、字符串myString){
int指数=0;

对于(int i=0;i来说,您的喷丝头2似乎不在第二个活动中,而是在完全不同的布局中。检查并查看您是否有适配器。如果您有自定义适配器,则必须将该位置值传递给自定义适配器的构造函数

在第二个活动中,将位置值传递给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;
    }
}
公共类CustomAdapter扩展了BaseAdapter{
私人充气机;
私人名单;
私人喷丝头位置;
公共CustomAdapter(上下文、列表、int位置){
充气器=(LayoutFlater)context.getSystemService(context.LAYOUT\u充气器\u服务);
this.list=列表;
喷丝头位置=位置;
}
@凌驾
public int getCount(){
返回list.size();
}
@凌驾
公共对象getItem(int位置){
返回位置;
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图持有者列表视图持有者;
if(convertView==null){
listViewHolder=新的ViewHolder();
convertView=充气机充气(R.layout.list,父项,false);
listViewHolder.spinner=(spinner)convertView.findViewById(R.id.spinner2);
setTag(listViewHolder);
}否则{
listViewHolder=(ViewHolder)convertView.getTag();
}
listViewHolder.spinner.setSelection(喷丝头位置);
返回视图;
}
静态类视窗夹{
纺纱机;
}
}

我已经尝试了你的代码,在姜饼的整个过程中,我都能很好地使用它。当你创建方法“private int getIndex(Spinner-Spinner等…”你正在onCreate之外创建方法…对吗?在onCreate之外是的。我对你有用吗?是的,它对我有用,你能发布你的完整代码吗,或者给我发一条私人消息吗?我不知道怎么做,请发电子邮件给我andrewelmasry@gmail.comIsn这不是同一件事吗?我是通过一个在onCreate外部创建的函数来查找索引的thinI解决了这个问题,您的喷丝头2不在第二个活动中,但在自定义适配器中的布局完全不同,因此您必须将位置传递给自定义适配器的构造函数。我将为您编辑我的答案。非常感谢。请也给我的问题打分
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;
    }
}