Android: AdapterView 不支持 addView(View)
Android: addView(View) is not supported in AdapterView
我有一个显示偏好动态列表的 PreferenceFragment,实现方式如下;
public class ConfigFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
for(int i = 0; i<items.size();i++) {
SettingsScreen s = new SettingsScreen(getActivity());
PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(getActivity());
screen.setTitle(itemName);
screen.addPreference(s);
indicatorCategory.addPreference(screen);
}
}
SettingsScreen 派生自 Preference 并显示自定义布局;
public class SettingsScreen extends Preference {
@Override
protected View onCreateView(ViewGroup group) {
LayoutInflater li = (LayoutInflater)getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
View v = li.inflate(R.layout.indicator_config, group, false);
return v;
}
到目前为止一切正常。我现在面临的问题是当我尝试将视图动态添加到 SettingsScreen 时。
以下将导致标题中所述的崩溃 (UnsupportedOperationException: addView(View) is not supported in AdapterView);
Button b = new Button(getContext);
group.addView(b);
那么如何将视图动态添加到 SettingsScreen?
我猜 Android 在 Whosebug 上没什么进展...
总之,回答我自己的问题;诀窍不是直接将子视图添加到视图,而是添加到视图的布局;
View v = li.inflate(R.layout.indicator_config, group, false);
LinearLayout r = (LinearLayout) v.findViewById(R.id.configLayout);
Button b = new Button(getContext);
r.addView(b);
我有一个显示偏好动态列表的 PreferenceFragment,实现方式如下;
public class ConfigFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.settings);
for(int i = 0; i<items.size();i++) {
SettingsScreen s = new SettingsScreen(getActivity());
PreferenceScreen screen = getPreferenceManager().createPreferenceScreen(getActivity());
screen.setTitle(itemName);
screen.addPreference(s);
indicatorCategory.addPreference(screen);
}
}
SettingsScreen 派生自 Preference 并显示自定义布局;
public class SettingsScreen extends Preference {
@Override
protected View onCreateView(ViewGroup group) {
LayoutInflater li = (LayoutInflater)getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
View v = li.inflate(R.layout.indicator_config, group, false);
return v;
}
到目前为止一切正常。我现在面临的问题是当我尝试将视图动态添加到 SettingsScreen 时。 以下将导致标题中所述的崩溃 (UnsupportedOperationException: addView(View) is not supported in AdapterView);
Button b = new Button(getContext);
group.addView(b);
那么如何将视图动态添加到 SettingsScreen?
我猜 Android 在 Whosebug 上没什么进展...
总之,回答我自己的问题;诀窍不是直接将子视图添加到视图,而是添加到视图的布局;
View v = li.inflate(R.layout.indicator_config, group, false);
LinearLayout r = (LinearLayout) v.findViewById(R.id.configLayout);
Button b = new Button(getContext);
r.addView(b);