更新:
我有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>
答案 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)
rails test <test_file_path>
而不是ImageButton
。Button
按钮对象setOnClickListener
而不是按钮btn
更新您的class
方法,如下所示:
onCreate()
希望这会有所帮助〜