我如何将OnClickListener设置为实现OnClickListener的类内部的按钮

时间:2017-06-16 06:27:23

标签: android android-studio onclicklistener

我想将OnClickListener设置为我在警告对话框内的按钮。 我使用上下文作为参数,但它不起作用。每次触摸该按钮时,应用程序停止工作是我的代码。 问题按钮位于alert_add.xml中,显示在警告对话框中

public class OnOrderClickListener implements View.OnClickListener {
Context context;

@Override
public void onClick(View v) {
    context = v.getRootView().getContext();
    LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View addOrderForm = inflater.inflate(R.layout.order_add, null, false);
    EditText orderId = (EditText) addOrderForm.findViewById(R.id.orderIdentifierEditText);
    Button addItemToOrder = (Button) addOrderForm.findViewById(R.id.addItem);
    addItemToOrder.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(v.getContext(),OnClickForAddProductToOrder.class);
            v.getContext().startActivity(intent);
        }
    });
    new AlertDialog.Builder(context)
            .setView(addOrderForm)
            .setTitle(R.string.order)
            .setPositiveButton(R.string.add_product_positive_button, new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            }).show();
}

}

Logcat:

  

致命的例外:主要                                                                         过程:com.hwp.myprototype,PID:10753                                                                        android.content.ActivityNotFoundException:无法找到显式   活动课   {com.hwp.myprototype / com.hwp.myprototype.OnClickForAddProductToOrder};   你有没有在AndroidManifest.xml中声明这个活动?                                                                             在   android.app.Instrumentation.checkStartActivityResult(Instrumentation.java:1854)                                                                             在   android.app.Instrumentation.execStartActivity(Instrumentation.java:1545)                                                                             在android.app.Activity.startActivityForResult(Activity.java:4283)

我希望有人可以帮我解决这个问题。提前谢谢。

4 个答案:

答案 0 :(得分:1)

问题是未在清单中定义的活动 OnClickForAddProductToOrder

在你的Manifest中添加以下代码

<activity
 android:name=".OnClickForAddProductToOrder"
 android:label="Add Products"
 android:theme="@style/AppTheme.NoActionBar"></activity>

答案 1 :(得分:0)

请在清单文件中添加OnClickForAddProductToOrder活动。

答案 2 :(得分:0)

在清单中的应用标记中添加您的活动(OnClickForAddProductToOrder)。

示例:

Access to undeclared static property:

答案 3 :(得分:0)

首先将您的活动添加到清单文件中:

<application
    ...>

    <activity
        android:name=".OnOrderClickListener" />

</application>

如果您使用新的View.OnClickListener(),则不必实现View.OnClickListener:

Button addItemToOrder = (Button) addOrderForm.findViewById(R.id.addItem);
addItemToOrder.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(v.getContext(),OnClickForAddProductToOrder.class);
        v.getContext().startActivity(intent);
    }
});

但是,如果要实现View.OnClickListener,则无需在addItemToOrder.setOnClickListener()中使用新的View.OnClickListener()。你要做的是:

Button addItemToOrder = (Button) addOrderForm.findViewById(R.id.addItem);
addItemToOrder.setOnClickListener(this);
...

@Override
public void onClick(View v) {
    int id = v.getId();
    switch (id) {
        case R.id.addItem:
            Intent intent = new Intent(v.getContext(),OnClickForAddProductToOrder.class);
            v.getContext().startActivity(intent);
            break;
        default:
            break;
    }
}