0

我正在尝试让一个图像按钮 OnClick 实时创建另一个动态 ImageButton 到一个单独活动的布局,但是新按钮创建的布局不断变为 null 并出现 nullpointerexception 错误并且应用程序崩溃,我在做什么错误的?

 package org.iimed.www;


import android.R.drawable;
import android.R.string;
import android.os.Bundle;

import android.text.Layout;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;


import android.widget.RelativeLayout.LayoutParams;

import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import org.iimed.www.Sundayopen;

    public class Penicillins extends Activity implements OnClickListener {






            public void onCreate(Bundle SavedInstanceState){
                 super.onCreate(SavedInstanceState);  
                 setContentView(R.layout.penicillin);
                ImageButton addmed = (ImageButton) findViewById(R.id.addmed);
                 addmed.setOnClickListener(this);






            }









                     public void onClick(View v){
                         switch (v.getId()) {

                         case R.id.addmed:
                             startActivity(new Intent(Penicillins.this,Sundayopen.class));
                        LayoutParams param = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT);
                         final RelativeLayout ll = (RelativeLayout)findViewById(R.id.sundayopen);
                         final  ImageButton  ab = (ImageButton)findViewById(R.id.adaba);

                ab.setLayoutParams(param);
                ll.addView(ab);


            }}}

我希望它出现的活动

package org.iimed.www;

import org.iimed.www.MainActivity;
import org.iimed.www.Iimedja;

import android.media.MediaPlayer;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.View;

import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;

import android.view.View.OnClickListener;
public class Sundayopen extends Activity implements OnClickListener {   

    ImageButton ab;
       @Override
    protected void onCreate(Bundle iimed) {
         super.onCreate(iimed);
         setContentView(R.layout.sundayopen);
         ImageButton ab = new ImageButton(getApplicationContext());
         ImageButton hb1 = (ImageButton) findViewById(R.id.homebutton1);

         ImageButton sbc = (ImageButton) findViewById(R.id.satlidopen);
         ImageButton abb = (ImageButton) findViewById(R.id.abbutton);
         sbc.setOnClickListener(this);
         hb1.setOnClickListener(this);
         abb.setOnClickListener(this);
         ab.setOnClickListener(this);
    }


         public void onClick(View v){
             switch (v.getId()) {
             case R.id.homebutton1:
                startActivity(new Intent(this, MainActivity.class));
                 break;
             case R.id.satlidopen:
                 MediaPlayer media = MediaPlayer.create(Sundayopen.this, R.raw.openlid);
                 media.start();
                startActivity(new Intent(this,Iimedja.class));
                break;
             case R.id.abbutton:

                    startActivity(new Intent(this, ImageTextListViewActivity.class));

             }
         }




        }

感谢您的耐心我很新我已经将主类编辑到我现在正在尝试的内容,我刚刚创建了一个 XML ImageButton 并分配了一个要调用的 ID,而不是即时进行并设置它的参数。虽然仍然没有运气:/

Stack
        Thread [<1> main] (Suspended (exception NullPointerException))  
    <VM does not provide monitor information>   
    Penicillins.onClick(View) line: 63  
    ImageButton(View).performClick() line: 4354 
    View$PerformClick.run() line: 17961 
    Handler.handleCallback(Message) line: 725   
    ViewRootImpl$ViewRootHandler(Handler).dispatchMessage(Message) line: 92 
    Looper.loop() line: 137 
    ActivityThread.main(String[]) line: 5328    
    Method.invokeNative(Object, Object[], Class, Class[], Class, int, boolean) line: not available [native method]  
    Method.invoke(Object, Object...) line: 511  
    ZygoteInit$MethodAndArgsCaller.run() line: 1102 
    ZygoteInit.main(String[]) line: 869 
    NativeStart.main(String[]) line: not available [native method]  
4

5 回答 5

0

您没有创建图像按钮的对象。它应该像

ImageButton ab = new ImageButton(getApplicationContext);
于 2013-10-29T04:32:47.273 回答
0

像这样初始化ab。

ImageButton ab = (ImageButton) findViewById(R.id.ab);
于 2013-10-29T04:34:00.857 回答
0

首先初始化需要你的布局ID

ImageButton ab = (ImageButton)findviewbyid(R.id.btnAb);

或者,如果您采用动态 ImageButton

ImageButton ab = new ImageButton(this);
于 2013-10-29T04:37:06.910 回答
0

nullpointer 错误是因为在您的onClickListener 中您甚至没有初始化ImageButton ab;并且您正在直接使用它。所以首先初始化它,然后设置drawable。

    addmed.setOnClickListener(new OnClickListener() {
         int i;
         RelativeLayout il = (RelativeLayout)findViewById(R.id.sundayopen); 
         ImageButton ab= (ImageButton)findViewById(R.id.<buttonID>); 
         public void onClick(View v){
             ab.setId(i);
            ab.getResources().getDrawable(R.drawable.adaba);

            il.addView(ab);
         }});
于 2013-10-29T04:39:12.187 回答
0

据我所知,您在代码中使用了不正确的变量声明。您已经在全局级别和本地级别声明了相同的ImageButton ab 。

删除全局变量声明后,您将看到如下错误:

将图像按钮 ab 的修饰符更改为 final。

类似的情况也适用于RelativeLayout ll

此外,在创建动态视图时最好使用 LinearLayout,因为您可以更好地控制它们的位置。

于 2013-10-29T05:34:47.747 回答