空指针动态图像按钮在不同的Activity中创建

时间:2013-10-29 04:28:20

标签: android dynamic nullpointerexception imagebutton

我正在尝试创建一个图像按钮OnClick在单独的活动上实时创建另一个动态ImageButton到布局,但是新按钮创建的布局在nullpointerexception错误和应用程序崩溃的情况下保持调高null,什么我做错了吗?

 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]  

5 个答案:

答案 0 :(得分:0)

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

ImageButton ab = new ImageButton(getApplicationContext);

答案 1 :(得分:0)

像这样初始化ab。

ImageButton ab = (ImageButton) findViewById(R.id.ab);

答案 2 :(得分:0)

首先初始化获取需要

的布局ID
ImageButton ab = (ImageButton)findviewbyid(R.id.btnAb);

或者如果你采用动态图像按钮

ImageButton ab = new ImageButton(this);

答案 3 :(得分:0)

nullpointer错误是因为你的onClick监听器中你甚至没有初始化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);
         }});

答案 4 :(得分:0)

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

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

  

将图像按钮ab的修改器更改为最终。

类似的情况也适用于 RelativeLayout ll

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