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);
    }
}