库项目中XML的空指针异常处理按钮

时间:2014-02-18 07:41:20

标签: android xml nullpointerexception

我正在尝试通过XML在我的图书馆计划中创建一个自定义对话框。

这是XML文件:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="@drawable/tenlogix" >

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginLeft="25dp" >

        <Button
            android:id="@+id/likeitb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/likeitd" />

        <Button
            android:id="@+id/dontlikeitb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/dontliked" />

        <Button
            android:id="@+id/notnowb"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:background="@drawable/notnowd" />
    </LinearLayout>

</RelativeLayout>

在Simple Java Class中,我正在创建Dialog,如下所示:

final Dialog feed_back_dialog = new Dialog(mAct);

feed_back_dialog.getWindow().setBackgroundDrawable(new ColorDrawable(0));
feed_back_dialog.setCancelable(true);
feed_back_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);

feed_back_dialog.setContentView(R.layout.ratedialog);


Button LikeIt = (Button) mAct.findViewById(R.id.likeitb);
Button DontLikeIt = (Button) mAct.findViewById(R.id.dontlikeitb);
Button NotNow = (Button) mAct.findViewById(R.id.notnowb);


LikeIt.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    String url = "market://details?id="+mAct.getPackageName();
    Intent i = new Intent(Intent.ACTION_VIEW);
    i.setData(Uri.parse(url));
    mAct.startActivity(i);
    mAct.finish();
  }
});

如果我没有设置LikeIt按钮的单击侦听器,则会显示该对话框,但是当我尝试在其上设置单击侦听器时。它给了我一个空指针异常。 我无法找到解决方案。当我尝试访问它时,LikeIt按钮为空。 我没有任何相同的名称资源。请帮忙。

引用mAct是正在使用库项目的另一个项目的活动。 期待积极快速的回应。 感谢。

3 个答案:

答案 0 :(得分:1)

更改为

 Button LikeIt = (Button) feed_back_dialog.findViewById(R.id.likeitb);

假设对话框布局有一个id为likeitb的按钮

同样适用于其他观点

 Button DontLikeIt = (Button) feed_back_dialog.findViewById(R.id.dontlikeitb);
 Button NotNow = (Button) feed_back_dialog.findViewById(R.id.notnowb);

findViewById查找当前膨胀布局中提到的id的视图。因此,您需要使用对话框对象初始化视图,因为您将布局的内容设置为对话框。视图属于对话框

答案 1 :(得分:1)

你可以做的是你可以像这样膨胀布局。然后使用膨胀视图,您可以获得Button控件。 [我希望 mAct 活动对象]

    LayoutInflater li = LayoutInflater.from(mAct);
    View inflatedView = li.inflate(R.layout.ratedialog, null, false);

    //button initialization
    Button LikeIt = (Button) inflatedView .findViewById(R.id.likeitb);
    Button DontLikeIt = (Button) inflatedView .findViewById(R.id.dontlikeitb);
    Button NotNow = (Button) inflatedView .findViewById(R.id.notnowb);

答案 2 :(得分:1)

只需使用mAct更改这些代码行中的feed_back_dialog 由于feed_back_dialog是您当前的布局

Button LikeIt = (Button) mAct.findViewById(R.id.likeitb); Button DontLikeIt = (Button) mAct.findViewById(R.id.dontlikeitb); Button NotNow = (Button) mAct.findViewById(R.id.notnowb);

一定是这样的

Button LikeIt = (Button) feed_back_dialog.findViewById(R.id.likeitb); Button DontLikeIt = (Button) feed_back_dialog.findViewById(R.id.dontlikeitb); Button NotNow = (Button) feed_back_dialog.findViewById(R.id.notnowb);