Android Studio imageButton并切换到另一个Activity

时间:2015-02-23 00:41:34

标签: android listener imagebutton

更新:

我有4个imageButtons,每个都需要一个" setOnClickListener"或类似的。一旦监听器触发,我就有意将用户带到下一个活动,该活动目前只是一个空白页面:

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

我从4个按钮开始,让它全部工作,然后决定使用imageButtons代替美学。

我不确定"按钮"的区别是什么。和" 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>

3 个答案:

答案 0 :(得分:4)

Android中的ImageButton不是Button的子类,而是ImageView的子类,因此您无法将ImageButton存储在Button变量中。因此,您需要使用ImageButton作为按钮对象类。方法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);
        }
    });

答案 1 :(得分:0)

如果您最初使用了按钮,则可能忘记更改投射类型。例如

Button btn = (Button)findViewById(R.id.btn); //Will work.
ImageButton btn = (Button)findViewById(R.id.btn); //Might compile, but will not work. 

或者,如果您将XML标记保留为普通按钮     <Button android:id = .../> 并试图将其转换为图像按钮,将抛出错误。您需要将代码更改为<ImageButton android:id = .../>

否则,我不确定您所做的更改会导致此错误。关于错误性质的进一步细节将有助于解决问题

答案 2 :(得分:0)

  1. 您应该rails test <test_file_path>而不是ImageButton
  2. 必须使用Button按钮对象setOnClickListener而不是按钮btn
  3. 更新您的class方法,如下所示:

    onCreate()

    希望这会有所帮助〜