从另一个布局获取信息到Activity

时间:2014-02-26 15:26:07

标签: android android-layout

引言

我在android上练习画布图形。为此我创建了一个应用程序,我可以用手指写一行,然后擦除它。

单击调色板时,会出现一个带有某些颜色的对话框窗口。所以我有2个布局:

1-主要布局

2-调色板布局

enter image description here

问题

首先,我在主要活动中获得了调色板,对于每个颜色按钮,我有一个onClick调用主Activity上的方法。

问题是现在我无法在onClick功能上执行此操作。我认为这与它有关,现在我将此布局作为视图而不是布局开始,因此每个按钮的onClick功能不起作用

这是palette.xml布局的按钮示例:

<ImageButton
        android:layout_width="@dimen/large_brush"
        android:layout_height="@dimen/large_brush"
        android:background="#FF660000"
        android:onClick="paintClicked"
        android:tag="#FF660000" />

当我点击每个按钮时,它会启动paintClicked方法并传递颜色标记。

那么,当我点击调色板按钮时,如何启动调色板布局,以便能够将信息从此布局传递到主要活动?

UPDATE - 调用palette.xml的当前方法

final Dialog paletteDialog = new Dialog(this);
paletteDialog.setTitle("Colores:");
paletteDialog.setContentView(R.layout.palette);

LinearLayout paletteLayout = (LinearLayout) paletteDialog.findViewById(R.id.paint_colors);
bnColor = (ImageButton) paletteLayout.getChildAt(0);
bnColor.setImageDrawable(getResources().getDrawable(R.drawable.button_pressed));

paletteDialog.show();

Logcat:

java.lang.NoSuchMethodException: paintClicked [class android.view.View]

这是paintClicked方法参考:

public void paintClicked(View view){

2 个答案:

答案 0 :(得分:1)

我建议您查看DialogFragment(如果您尚未使用它)。您可以创建一个简单的回调接口,以便在单击颜色时,它会使用此信息回调到封闭的Activity。使封闭的Activity实现接口(由下面的onAttach生命周期方法强制执行),并在选择颜色时让对话框片段调用它。

public class ColorPickerDialog extends DialogFragment implements View.OnClickListener {

    // Define a callback interface
    public interface OnColorSelectedListener {
        public void onColorSelected(int color);
    }

    private OnColorSelectedListener listener;

    @Override
    public void onAttach(Activity activity) {
        if (!(activity instanceof OnColorSelectedListener)) {
            throw new IllegalStateException("Activity must implement OnColorSelectedListener!");
        }
        listener = (OnColorSelectedListener) activity;
    }

    @Override
    public void onDetach() {
        listener = null;
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        LayoutInflater inflater = LayoutInflater.from(getActivity());
        View view = inflater.inflate(R.layout.palette, container, false);

        // call view.findViewById(...) for all your color buttons and
        // set the OnClickListener
        view.findViewById(...).setOnClickListener(this);
        ...

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle("Colores:");
        builder.setView(view);
        return builder.create();
    }

    @Override
    public void onClick(View v) {
        /* 
         * Determine the color from the view that was clicked. You can use a
         * switch statement on v.getId() if they all have IDs, but there are
         * other possibilities as well.
         */
        int color = ...;
        listener.onColorSelected(color);
        dismiss();
    }
}

答案 1 :(得分:0)

android:onClick仅在扩展视图的Context包含函数(此处为“paintClicked”)时才有效。 因此,如果您没有使用主Activity调整此布局,则可能是因为它不起作用。

将Ids设置为ImageButtons并使用一些findViewById(R.id.btnX).setOnClickListener(myListener)可能会更好;显示按钮后。