简体   繁体   中英

ListView in alertdialog not displaying correctly when using holoeverywhere

I am using the Holoeverywhere compatibility library along with the sherlockActionbar library. The problem i am having is that when i inflate the view in the DialogFragment class, it doesnt display corrrectly on pre 3.0 devices

 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();
    }


}

the link to how the display looks like on pre 3.0 devices is below http://i49.tinypic.com/2j9yeh.png

on post 3.0 devices it displays properly http://i46.tinypic.com/egy8tt.png

I cant figure out what is causing the wrong display. The layout file is shown below

    <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>

Any help would be really appreciated.

you set "android: layout_weight =" 1 "/>" as weights for the listview. What is the value of "weightSum" to the parent view to the listview? the problem may be here.

AlertDialog.

You are use Dialog instead AlertDialog, you are use ?android:attr/buttonBarStyle instead ?buttonBarStyle, you are use ?android:attr/buttonBarButtonStyle instead ?buttonBarButtonStyle. Just use AlertDialog - it's already contains all needed styles for list with bottom button bar, see demo.

I found the problem. Changing the line

SimpleCursorAdapter adapter = new SimpleCursorAdapter(app, android.R.layout.simple_list_item_activated_1, pointSystem, from, to);

to

SimpleCursorAdapter adapter = new SimpleCursorAdapter(app, org.holoeverywhere.R.layout.simple_list_item_activated_1, pointSystem, from, to);

or

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);

got the solution from https://github.com/ChristopheVersieux/HoloEverywhere/issues/225

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM