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