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);
}
答案 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)
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()来刷新。