我有一个由两个 fragment 组成的 Activity 。左边是侧边栏,右边是 MapView(见下面的屏幕截图)。
左侧有一个微调器,它将填充 map 上的对象。现在,我用一些值对其进行了硬编码,直到我弄清楚这个问题。选择微调器后,会出现一个对话框,但它是空的。知道发生了什么吗?
这是我的左侧 fragment 的代码(不是很复杂):
package android.splitdisplay;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.Toast;
public class SideFragment extends Fragment {
String[] tracks = { "ObjectOne", "ObjectTwo",
"ObjectThree"
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.getActivity().setContentView(R.layout.sidefragment);
final Spinner s = (Spinner) this.getActivity().findViewById(
R.id.track_spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this
.getActivity().getBaseContext(),
android.R.layout.simple_spinner_item, tracks);
s.setAdapter(adapter);
s.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
int item = s.getSelectedItemPosition();
Toast.makeText(SideFragment.this.getActivity().getBaseContext(),
"clicked "+item, Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
public void onListItemClick(ListView parent, View v, int position, long id) {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.sidefragment, container, true);
}
}
这是 SideFragment 的 XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Tracks"
android:textColor="#adff2f"
android:textSize="30sp" />
<Spinner
android:id="@+id/track_spinner"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:drawSelectorOnTop="true"
android:prompt="@string/track_prompt"
android:spinnerMode="dialog" >
</Spinner>
</LinearLayout>
这是我单击微调器时看到的内容:
以下是 zip 中的所有源代码:
最佳答案
问题不在于 Spinner,问题在于您正在给两个 Spinner 充气。一个在 onCreateView 方法中,另一个在这一行中:
this.getActivity().setContentView(R.layout.sidefragment);
并且只有一个带有提供程序的微调器...所以我建议您在 onCreationView 上设置所有 GUI 变量,如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.sidefragment, container, true);
final Spinner s = (Spinner) v.findViewById(
R.id.track_spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this
.getActivity().getBaseContext(),
android.R.layout.simple_spinner_item, tracks);
s.setAdapter(adapter);
s.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> arg0, View arg1,
int arg2, long arg3) {
int item = s.getSelectedItemPosition();
Toast.makeText(SideFragment.this.getActivity().getBaseContext(),
"clicked "+item, Toast.LENGTH_SHORT).show();
}
@Override
public void onNothingSelected(AdapterView<?> arg0) {
}
});
return v;
}
并删除重写的方法onCreate。
关于java - Android Spinner 对话框未填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8231086/