Android Studio imageButton并切换到其他活动

Android Studio imageButton并切换到其他活动,android,listener,imagebutton,Android,Listener,Imagebutton,更新: 我有4个图像按钮,每个按钮都需要一个“setOnClickListener”或类似的按钮。一旦监听器启动,我打算将用户带到下一个活动,这目前只是一个空白页: public void onClick(View v){ Intent intent = new Intent(MainActivity.this, NewSong.class); startActivity(intent); } 我从4个按钮开始,让它们都能工作,然后决定用imageButtons来代替美学 我不确定“按钮”和“

更新:

我有4个图像按钮,每个按钮都需要一个“setOnClickListener”或类似的按钮。一旦监听器启动,我打算将用户带到下一个活动,这目前只是一个空白页:

public void onClick(View v){
Intent intent = new Intent(MainActivity.this, NewSong.class);
startActivity(intent);
}
我从4个按钮开始,让它们都能工作,然后决定用imageButtons来代替美学

我不确定“按钮”和“图像按钮”有什么区别,但你肯定不能互换它们。到目前为止,我最好的“谷歌搜索”还没有找到任何解决方案来理解如何修改我以前的“按钮”解决方案

欢迎任何协助

以下是MainActivity.java代码:

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //In this next line, note that 'btn' will never be used, it's
        //grayed out in the "Button btn...", and in the (R.id.btn) it is 
        //shown in red font, indicating I probably need to declare a resource of some kind?
        Button btn = (Button)findViewById(R.id.btn);


        Button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,    NewSong.class);
                startActivity(intent);
            }
        });
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}
下面是activity_main.xml:

<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity"
    android:clickable="true">



    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageButton"
        android:background="@drawable/new_song"
        android:layout_centerVertical="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"/>

    <ImageButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageButton2"
        android:background="@drawable/loadsong"
        android:layout_alignTop="@+id/imageButton"
        android:layout_toRightOf="@+id/imageButton"
        android:layout_toEndOf="@+id/imageButton"
        android:layout_marginLeft="55dp"
        android:layout_marginStart="55dp"/>


</RelativeLayout>

如果您最初有可用的按钮,您可能忘记更改强制类型。比如说

Button btn = (Button)findViewById(R.id.btn); //Will work.
ImageButton btn = (Button)findViewById(R.id.btn); //Might compile, but will not work. 
或者,如果将XML标记保留为普通按钮
如果试图将其转换为图像按钮,则会抛出错误。您需要将标签更改为


否则,我不确定您所做的哪些更改会导致出现问题。有关错误性质的更多详细信息将有助于解决问题

如果您最初有可用的按钮,则可能忘记更改强制类型。比如说

Button btn = (Button)findViewById(R.id.btn); //Will work.
ImageButton btn = (Button)findViewById(R.id.btn); //Might compile, but will not work. 
或者,如果将XML标记保留为普通按钮
如果试图将其转换为图像按钮,则会抛出错误。您需要将标签更改为


否则,我不确定您所做的哪些更改会导致出现问题。关于错误性质的进一步详细信息将有助于解决问题

Android中的ImageButton不是Button的子类,而是ImageView的子类,因此不能将ImageButton存储在Button变量中。因此,您需要使用ImageButton作为button对象类。方法setOnClickListener不是静态的,应该在要使用的button对象上设置。另外,您尝试使用的按钮id不在xml中(至少不是您发布的部分)。所以你的代码应该是这样的:

    ImageButton btn = (ImageButton)findViewById(R.id.imageButton);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, NewSong.class);
            startActivity(intent);
        }
    });

Android中的ImageButton不是Button的子类,而是ImageView的子类,因此不能将ImageButton存储在Button变量中。因此,您需要使用ImageButton作为button对象类。方法setOnClickListener不是静态的,应该在要使用的button对象上设置。另外,您尝试使用的按钮id不在xml中(至少不是您发布的部分)。所以你的代码应该是这样的:

    ImageButton btn = (ImageButton)findViewById(R.id.imageButton);

    btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent(MainActivity.this, NewSong.class);
            startActivity(intent);
        }
    });
  • 您应该使用
    ImageButton
    而不是
    按钮
  • 必须使用
    setOnClickListener
    来创建按钮对象
    btn
    ,而不是按钮
    class
  • 如下更新您的
    onCreate()
    方法:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ImageButton btn = (ImageButton) findViewById(R.id.imageButton);
        ImageButton btn2 = (ImageButton) findViewById(R.id.imageButton2);
    
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,    NewSong.class);
                startActivity(intent);
            }
        });
    
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Do something...
            }
        });
    }
    
    希望这会有所帮助~

  • 您应该使用
    ImageButton
    而不是
    按钮
  • 必须使用
    setOnClickListener
    来创建按钮对象
    btn
    ,而不是按钮
    class
  • 如下更新您的
    onCreate()
    方法:

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    
        ImageButton btn = (ImageButton) findViewById(R.id.imageButton);
        ImageButton btn2 = (ImageButton) findViewById(R.id.imageButton2);
    
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,    NewSong.class);
                startActivity(intent);
            }
        });
    
        btn2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // Do something...
            }
        });
    }
    

    希望这会有帮助~

    你面临的问题是什么?你能更详细地解释你的问题吗?我的问题是我找不到允许我使用imageButton而不是按钮的“魔法”代码。我刚刚用新的信息、代码和一些评论更新了我的帖子。谢谢你的帮助。你面临的问题是什么?你能更详细地解释一下你的问题吗?我的问题是我找不到允许我使用imageButton而不是按钮的“魔法”代码。我刚刚用新的信息、代码和一些评论更新了我的帖子。谢谢你的帮助,谢谢!这就成功了。现在我要设置一个开关,这样我可以处理所有四个按钮。我真的很感谢你的帮助!很高兴我能帮忙。考虑接受这个答案,所以其他用户可以快速识别它。谢谢!这就成功了。现在我要设置一个开关,这样我可以处理所有四个按钮。我真的很感谢你的帮助!很高兴我能帮忙。考虑接受这个答案,其他用户可以快速识别。