Невозможно изменить элемент LayoutParams в галерее Android, чтобы оно отображалось в представлении. - PullRequest
1 голос
/ 15 марта 2012

Я использую Android Gallery в SDK 2.3.3.Мне нужно, чтобы поле было шире для выбранного элемента.Я сохраняю ссылку на «последний» выбранный элемент, чтобы при новом выборе я мог изменить поле в макете вновь выбранного элемента, а также ранее выбранного элемента.Я пытался сделать недействительными соответствующие элементы представления, но не могу вызвать обновление элементов галереи.Будем весьма благодарны за любую помощь в том, как сделать так, чтобы изменение полей влияло на галерею.

Я с удовольствием уточню любой вопрос, если это необходимо.

Спасибо, Юань

private class MySelectListener implements AdapterView.OnItemSelectedListener {

    private static final int unselected_margin_left = 1;
    private static final int unselected_margin_right = 1;
    private static final int selected_margin_left = 15;
    private static final int selected_margin_right = 15;

    private LinearLayout currWrapper = null;
    private LinearLayout lastWrapper = null;
    private Context ctx;

    public MySelectListener(Context c) {
        ctx = c;
    }

    @Override
    public void onItemSelected(AdapterView<?> parent, View v, int position, long id) {

        // This LinearLayout is a wrapper for the gallery items
        currWrapper = (LinearLayout)(v.findViewById(R.id.unconf_order_item_layout_wrapper));

        // Reset the margins of the view that was selected
        try {
            if (lastWrapper != null) {
                setMargins(lastWrapper, false);
            }
        } catch (Exception clear) {
        }

        // Set the "wider" margins for the selected item
        try {
            setMargins(currWrapper, true);
        } catch (Exception animate) {
        }

        lastWrapper = currWrapper;
    }

    @Override
    public void onNothingSelected(AdapterView<?> parent) {
    }

    private void setMargins(LinearLayout view, boolean selected) {
        LinearLayout.LayoutParams layoutParams = (LinearLayout.LayoutParams)view.getLayoutParams();
        if (selected) {
            Toast.makeText(ctx, "setting selected margins", Toast.LENGTH_SHORT).show();
            layoutParams.setMargins(selected_margin_left, 0, selected_margin_right, 0);
        } else {
            Toast.makeText(ctx, "setting unselected margins", Toast.LENGTH_SHORT).show();
            layoutParams.setMargins(unselected_margin_left, 0, unselected_margin_right, 0);
        }
    }

}
...