按钮不起作用

时间:2014-07-10 08:53:11

标签: android onclicklistener

我有一些代码。使用此代码,我可以制作一张图片,它会在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));

5 个答案:

答案 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