Android 按钮不存在';行不通
我有一点密码。使用此代码,我可以制作一张图片,它将在Android 按钮不存在';行不通,android,onclicklistener,Android,Onclicklistener,我有一点密码。使用此代码,我可以制作一张图片,它将在ImageView中显示图片。现在我添加了另一个按钮(weiter),它就像一个“下一步”按钮。 但是现在我不能开始这一页了。OnClickListener()有错误吗 } 你定义了- Button btn = (Button) findViewById(R.id.Foto); //This is not OK btn.setOnClickListener(new OnClickListener(){ @Override publ
ImageView
中显示图片。现在我添加了另一个按钮
(weiter),它就像一个“下一步”按钮
。
但是现在我不能开始这一页了。OnClickListener()
有错误吗
}
你定义了-
Button btn = (Button) findViewById(R.id.Foto); //This is not OK
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
}
});
注意:
Foto
是一个类,而不是按钮的id,因此您将获得ClassCastException
将Foto类强制转换为OnClickListener
无效。您应该在布局xml中定义有效的属性,其中包含一些id,可以用作类中按钮的id
更新:
因为类名和id是相同的。因此,将按钮的id更改为其他内容,并在类中执行相同的更改。它应该会起作用
public class Foto extends Activity implements OnClickListener{
ImageView iv;
Button weiter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.foto);
// ActionBar
setTitle("Get Picture");
android.app.ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#104E8B")));
weiter =(Button)findViewById(R.id.weiter);
weiter.setOnClickListener(this);
startActivity(new Intent(this,Login.class));
iv=(ImageView) findViewById(R.id.imageView);
Button btn = (Button) findViewById(R.id.Foto);
btn.setOnClickListener(this);
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode ==0)
{
Bitmap theImage = (Bitmap) data.getExtras().get("data");
iv.setImageBitmap(theImage);
}
@Override
public void onClick(View v) {
if(v==btn){
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
}
if(v==weiter){
// do some code for weiter button
}
}
}
我只编辑了按钮的代码。您单击的侦听器代码不正确。首先,如果您想为每个按钮编写单独的onClickListener,那么您可以简单地如下所示:
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//Do something here on this button click
}
});
public void onClick(View v) {
//Auto generated method
//in this method you can use switch case of if else statement to do as needed
switch (v.getId())
case R.id.Foto:
//do something when Foto is pressed here
break;
case R.id.weiter:
//do something here when weiter button is pressed
break;
default:
break;
}
如果有多个按钮,则可以实现接口OnClickListener
,该接口将在类中实现必要的方法,然后可以使用switch
case语句或if{…}或if{…}或if{…}
语句来执行逻辑。请参阅下文
首先将接口实现为
public class Foto extends Activity implements OnClickListener
然后编译器会出错,并询问您是否要实现必要的方法,只需按照它所说的去做,您的类中就会有一个自动生成的方法,如下所示
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//Do something here on this button click
}
});
public void onClick(View v) {
//Auto generated method
//in this method you can use switch case of if else statement to do as needed
switch (v.getId())
case R.id.Foto:
//do something when Foto is pressed here
break;
case R.id.weiter:
//do something here when weiter button is pressed
break;
default:
break;
}
现在,在您的onCreate
方法中,只需按如下所示更新代码
weiter =(Button)findViewById(R.id.weiter);
weiter.setOnClickListener(this); //if you implement the interface just use this keyword nothing else
//startActivity(new Intent(this,Login.class)); this line should not be here, it should be in the onClick method
iv=(ImageView) findViewById(R.id.imageView);
Button btn = (Button) findViewById(R.id.Foto);
btn.setOnClickListener(this) //same here just use this keyword
还有第三种方法可以捕捉点击,你可以看到我的另一个答案。有一个活动
实现OnClickListener
并不好
相反,您可以尝试以下操作:
OnClickListener mPhotoClick = new OnClickListener {
@Override
public void onClick(View v) {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
}
};
此外,您的视图分配应该类似于
ch.swisscom.smartmeter.Foto = (ch.swisscom.smartmeter.Foto) findViewById(R.id.foto);
别忘了实现OnClickListener显示布局xml?您正在将Foto
强制转换为OnClickListener
,这在weiter.setOnClickListener((OnClickListener)this)行中无效
他的xml中确实有带有Foto
id的按钮
ch.swisscom.smartmeter.Foto = (ch.swisscom.smartmeter.Foto) findViewById(R.id.foto);
Button weiter ;
Button btn ;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.foto);
// ActionBar
setTitle("Get Picture");
android.app.ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#104E8B")));
weiter =(Button)findViewById(R.id.weiter);
weiter.setOnClickListener(this);
iv=(ImageView) findViewById(R.id.imageView);
btn = (Button) findViewById(R.id.Foto);
btn.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId()==R.id.Foto)
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
}
if(v.getId()==R.id.weiter){
startActivity(new Intent(this,Login.class));//i just shifted your code here
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode ==0)
{
Bitmap theImage = (Bitmap) data.getExtras().get("data");
iv.setImageBitmap(theImage);
}
}