我正在使用Holoeverywhere兼容性库以及sherlockActionbar库。我遇到的问题是,当我在DialogFragment类中膨胀视图时,它在3.0之前的设备上没有正确显示
public static class PointSystemDialogFragment extends DialogFragment implements View.OnClickListener, DialogInterface.OnClickListener {
static final private int GET_CODE = 0;
static PointSystemDialogFragment newInstance() {
return new PointSystemDialogFragment();
}
Context app;
Cursor pointSystem;
DatabaseManager db;
@Override
public void onCreate(Bundle savedInstanceState) {
setStyle(STYLE_NORMAL, 0); //Used for theme switching in samples
super.onCreate(savedInstanceState);
app = getSupportActivity();
db = DatabaseManager.getInstance();
}
@Override
public void onClick(DialogInterface dialog, int which) {
switch (which) {
case Dialog.BUTTON_POSITIVE:
break;
case Dialog.BUTTON_NEGATIVE:
break;
case Dialog.BUTTON_NEUTRAL:
Intent intent = new Intent(getSupportActivity(), AddPointSystem.class);
startActivity(intent);
break;
}
}
@Override
**public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.pointsystemlist2, container, false);
String pName = PointSystemDao.Properties.Name.columnName;
pointSystem = db.getPointSystemCursor();
String pValue = PointSystemDao.Properties.PointValue.columnName;
String[] from = {pName, pValue};
int[] to = {android.R.id.text1, android.R.id.text2};
SimpleCursorAdapter adapter = new SimpleCursorAdapter(app, android.R.layout.simple_list_item_activated_1, pointSystem, from, to);
ListView listView = (ListView) view.findViewById(R.id.pointsystem);
listView.setTextFilterEnabled(true);
listView.setAdapter(adapter);
db.getPointSystemCursor().requery();
// Tell the list view to show one checked/activated item at a time.
listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
listView.setItemChecked(0, true);
mListener = (onPointSystemChanged)app;
listView.setOnItemClickListener(new android.widget.AdapterView.OnItemClickListener() {
@Override
public void onItemClick(android.widget.AdapterView<?> parent, View view, int position, long id) {
Long i = (long) position + 1;
PointSystem pointSystem1 = db.getPointSystemDao().load(i);
mListener.onSelectedPointSystem(pointSystem1.getName());
//mListener.onPointSystemChanged(i);
mListener.onChangedPointSystem(pointSystem1);
}
});
Button Ok = (Button) view.findViewById(R.id.btnOk);
Ok.setOnClickListener(this);
Ok.requestFocus();
Button Add = (Button) view.findViewById(R.id.btnAdd);
Add.setOnClickListener(this);
Button Cancel = (Button) view.findViewById(R.id.btnCancel);
Cancel.setOnClickListener(this);
Dialog dialog = getDialog();
if (dialog != null) {
dialog.setTitle("Select Point System");
dialog.setCanceledOnTouchOutside(false);
}
return view;
}**
@Override
public void onClick(View v) {
int viewId = v.getId();
switch (viewId) {
case R.id.btnOk:
break;
case R.id.btnAdd:
Intent intent = new Intent(getSupportActivity(), AddPointSystem.class);
startActivity(intent);
break;
case R.id.btnCancel:
break;
}
dismiss();
}
}
下面是关于3.0版之前设备显示效果的链接 http://i49.tinypic.com/2j9yeh.png
在3.0版设备上正常显示 http://i46.tinypic.com/egy8tt.png
我无法弄清楚导致错误显示的原因。 布局文件如下所示
<ListView
android:layout_width="match_parent"
android:layout_height="0dp"
android:id="@+id/pointsystem"
android:layout_weight="1"/>
<LinearLayout style="?android:attr/buttonBarStyle"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:measureWithLargestChild="true">
<Button style="?android:attr/buttonBarButtonStyle" android:id="@+id/btnCancel"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Cancel" />
<Button style="?android:attr/buttonBarButtonStyle" android:id="@+id/btnAdd"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Add" />
<Button style="?android:attr/buttonBarButtonStyle" android:id="@+id/btnOk"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"
android:text="OK" />
</LinearLayout>
</LinearLayout>
任何帮助都会非常感激。
答案 0 :(得分:0)
你设置“android:layout_weight =”1“/&gt;”作为列表视图的权重。列表视图的父视图中“weightSum”的值是多少?问题可能在这里。
答案 1 :(得分:0)
AlertDialog。
您使用的是Dialog而不是AlertDialog,您使用的是?android:attr / buttonBarStyle而不是?buttonBarStyle,您使用的是?android:attr / buttonBarButtonStyle而不是?buttonBarButtonStyle。只需使用AlertDialog - 它已包含底部按钮栏列表所需的所有样式,请参阅演示。
答案 2 :(得分:0)
我发现了问题。 改变行
SimpleCursorAdapter adapter = new SimpleCursorAdapter(app, android.R.layout.simple_list_item_activated_1, pointSystem, from, to);
到
SimpleCursorAdapter adapter = new SimpleCursorAdapter(app, org.holoeverywhere.R.layout.simple_list_item_activated_1, pointSystem, from, to);
或
int layout = int layout = (Build.VERSION.SDK_INT >= 11) ? org.holoeverywhere.R.layout.simple_list_item_activated_1 : android.R.layout.simple_list_item_1;
SimpleCursorAdapter adapter = new SimpleCursorAdapter(app, layout, pointSystem, from, to);
从https://github.com/ChristopheVersieux/HoloEverywhere/issues/225
获得解决方案