ImageView的OnClickListener不起作用

时间:2013-05-30 17:16:09

标签: android android-activity nullpointerexception imageview onclicklistener

image123(ImageView)工作正常,但是当涉及到ONclickListener时,即使使用不同的方法调用监听器,它也不起作用。

我把func()包含在setContentView()之后的image123(ImageView)的findviewbyid,它工作正常。当func()在代码中显示的重置按钮的OnClicklistener中时,image123的onclickListener不起作用。 / p>

问题:

如何在重置按钮onclicklistener中调用func()以及在Oncreate()Activity中启动?

它捕获了Log cat

中显示的异常
  

- Onclick Listener的异常“,”java.lang.NullPointerException

     public class MainActivity extends Activity {
     ImageView image123;

    int[] resultid=new int[25];

        Button buttonExit;
      Button buttonreset;



            protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

     buttonreset=(Button) findViewById(R.id.button_reset);
     buttonExit=(Button) findViewById(R.id.button_exit);

     v1=(TextView)findViewById(R.id.name);
     v2=(TextView)findViewById(R.id.fruit_count);
     //--------------------------Exit Button---------------------------
     buttonExit.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            finish();

        }
    });

    //*******************Exception comes here*********************       
     try{
     image123.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

            Log.d("Listner Called", "Listner Called");

        }
    });
     }
     catch(Exception e)
     {

         Log.d("Exception at onclickListener", e.toString());

     }


     buttonreset.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {

 func();

        }});
}


void func()
{
    String as=null; 
    int resultid;


    SecureRandom random=new SecureRandom();
image123=new ImageView(this);
    as=("img"+1).toString();
    resultid=getResources().getIdentifier(as, "id","com.example.selectiongame"      );
    Log.d(as, ""+resultid);
    image123=(ImageView) findViewById(resultid);



    as="drawable"+(random.nextInt(3)+1);
    resultid = getResources().getIdentifier(as, "drawable", "com.example.selectiongame");
    Log.d(as, ""+resultid);
    image123.setImageResource(resultid);
}

2 个答案:

答案 0 :(得分:0)

尝试创建一个ResID数组和一个ImageView数组。然后执行类似这样的操作,而不是使用findViewById()...

初始化它们
for(int i = 0; i < res_arr.length; i++)
{
    images[i] = new ImageView(this);
    images[i].setImageResource(res_arr[i]);
    images[i].setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Log.d("Button_Clicked", "Button Clicked");
        }
    });
}

答案 1 :(得分:0)

  1. 除了Oncreate(Bundle b)或Some Listener之外的其他函数(例如OnclickListener,onselectionchange等),你不能在ImageView的findviewbyid()中找到它。如果你想在Oncreate以外的函数中查看视图的视图(...),则在SetContentView()和其他先决条件Findviewbyid(...)之后调用该函数一次。
  2. 2。 为了刷新你的Activity,当你不能使用包含findView的findviewbyid(...)的函数时,就像我的情况一样,在body中有一些按钮(例如Refresh,Reset)OnclickListner。你必须编写以下代码

         buttonreset.setOnClickListener(new OnClickListener() {
    
            @Override
            public void onClick(View arg0) {
    
     Bundle newBundle=new Bundle();
     onCreate(newBundle);
    
    //func();     >>We can not use this func() here if we are using it in Oncreate(...) in case of Array of ImageView
    
            }});
    }
    

    对于Imageview以外的其他视图,可能是常规代码行...但是对于ImageView或ImageView的数组......必须牢记这些事情,并且必须使用Simply Oncreate()来刷新。