【问题标题】:OnClickListener of ImageView is not WorkingImageView 的 OnClickListener 不工作
【发布时间】:2013-05-30 17:16:09
【问题描述】:

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

我在 SetContentView() 之后放置了包含 image123 (ImageView) 的 findviewbyid 的 func(),它工作正常。当 func() 位于重置按钮的 OnClicklistener 中时,image123 的 OnclickListener 不起作用,如代码所示。

问题:

如何在重置按钮 onclicklistener 以及在 Oncreate() Activity 开始时调用 func()?

它捕获 Log cat 中显示的异常

- Onclick 监听器出现异常" ,"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);
}

【问题讨论】:

  • “它不起作用”是什么意思?当你编译和运行你的应用程序时会发生什么?
  • OnclickListener 函数没有运行...对点击没有影响
  • 请提供一个完整的简短示例来说明您的问题。目前,您提供了两个没有任何上下文的 try...catch 块来显示它们在代码中的位置。我建议你用一个ImageView 创建一个新的小项目并设置它的OnClickListener。如果你可以让它工作,更进一步,创建一个只有 两个 ImageViews 的数组。当你开始工作时,一次添加一点。如果您在任何时候遇到问题,您都可以在此处显示您的问题的少量代码。
  • Code-Gur0 ,我已经简化了代码,但 OnclickListener 异常仍在出现,但这是简化的一个。你可以看到它
  • 你得到什么异常?请发布确切的错误消息。

标签: android android-activity nullpointerexception imageview onclicklistener


【解决方案1】:

尝试创建一个 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");
        }
    });
}

【讨论】:

    【解决方案2】:
    1. 您不能在除 Oncreate(Bundle b) 或 Some Listener(例如 OnclickListener 、onselectionchange 等)之外的其他函数中找到 ImageView 的 viewbyid()。如果您想在 Oncreate 以外的函数中查找视图的 findviewbyid(...) ,至少在 SetContentView() 和其他先决条件 Findviewbyid(...) 之后调用该函数一次。

    2。 为了刷新您的活动,当您无法使用包含 ImageView 的 findviewbyid(...) 的函数时,例如在我的情况下,在正文中的某个按钮(例如刷新,重置) 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() 来刷新。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多