我有一些代码。使用此代码,我可以制作一张图片,它会在ImageView
中显示图片。现在我添加了另一个Button
(weiter),它就像是“下一个”Button
。
但现在我无法启动此页面。 OnClickListener()
是否有错误?
public class Foto extends Activity{
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((OnClickListener) this);
startActivity(new Intent(this,Login.class));
iv=(ImageView) findViewById(R.id.imageView);
Button btn = (Button) findViewById(R.id.Foto);
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(intent, 0);
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if(requestCode ==0)
{
Bitmap theImage = (Bitmap) data.getExtras().get("data");
iv.setImageBitmap(theImage);
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/Foto"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:layout_marginTop="49dp"
android:text="@string/foto" />
<ImageView
android:id="@+id/test"
android:layout_width="300dp "
android:layout_height="300dp"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true" />
<ImageView
android:id="@+id/imageView"
android:layout_width="300dp"
android:layout_height="300dp"
android:layout_centerHorizontal="true"
android:layout_centerVertical="true"
android:src="@drawable/keinfoto" />
<Button
android:id="@+id/weiter"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/test"
android:layout_centerHorizontal="true"
android:text="@string/weiter" />
</RelativeLayout>
之前的.java
public class QRCodeScannerActivity extends Activity implements OnClickListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.addmeterscan);
setTitle("QR-Code scannen");
android.app.ActionBar bar = getActionBar();
bar.setBackgroundDrawable(new ColorDrawable(Color.parseColor("#104E8B")));
Button weiter = (Button)findViewById(R.id.btnweiter);
weiter.setOnClickListener(this);
}
public void onClick (View v) {
switch(v.getId()){
case R.id.scan:
IntentIntegrator integrator = new IntentIntegrator(this);
integrator.initiateScan();
break;
case R.id.btnweiter:
startActivity(new Intent(this,Foto.class));
答案 0 :(得分:0)
你定义了 -
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
是一个Class而不是按钮的id,因此您将获得ClassCastException。
将照片类投射到OnClickListener
无效。您应该在布局xml中定义有效属性,并使用一些id作为类中按钮的id。
<强>更新强>
由于Class name和id相同。因此,将按钮的id更改为其他内容,并在课堂上进行相同的更改。它应该工作。
答案 1 :(得分:0)
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
}
}
}
我只编辑了按钮的代码。
答案 2 :(得分:0)
您单击侦听器未正确编码。首先,如果你想为每个按钮编写单独的onclicklistener,那么你可以这样做,如下所示,
btn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
//Do something here on this button click
}
});
如果您有多个按钮,那么您可以实现接口OnClickListener
,然后在您的类中实现必要的方法,然后您可以使用switch
case语句或if{...}else if{...}
语句做你的逻辑。请参考下面,
首先将接口实现为
public class Foto extends Activity implements OnClickListener
然后会出现编译器错误,并且会询问您是否要实现必要的方法,就像它说的那样,你将在你的类中有一个自动生成的方法,如下所示,
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
还有第三种方法可以捕获点击次数,您可以看到我的另一个答案here。
答案 3 :(得分:0)
拥有Activity
工具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);
答案 4 :(得分:0)
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);
}
}
别忘了实现OnClickListener