我试图创建按钮,只需点击一下,长按即可执行某些不同的指令,但我对如何将所有内容放在一起的理解很少。为每个按钮执行一个定义的方法是可以的,但我认为最好使用onClickListeners,不是吗?
所以我的代码如下。正如你所看到的,我试图抓住每个按钮的两种类型的事件,但是当我按下按钮1A时,我得到2A的吐司,当我点击按钮2A时,我得到一个错误和应用程序崩溃。 要解决的第二件事是将onClick和onLongClick绑定在一起。
activity_scout.xml
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
android:layout_height="match_parent"
android:layout_width="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
tools:context="com.example.android.scout.ScoutActivity">
<LinearLayout
android:id="@+id/activity_scout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="8dp"
android:paddingLeft="8dp"
android:paddingRight="8dp"
android:paddingTop="8dp"
android:orientation="vertical" >
<Button
android:id="@+id/but1A"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1a"
android:onClick="click1a"
/>
<Button
android:id="@+id/but2A"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2a"
android:onClick="click2a" />
</LinearLayout>
</ScrollView>
ScoutActivity.java
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import static com.example.android.basketscout.R.id.butPlayer1A;
import static com.example.android.basketscout.R.id.butPlayer2A;
import static com.example.android.basketscout.R.id.butPlayer3A;
import static com.example.android.basketscout.R.id.butPlayer4A;
import static com.example.android.basketscout.R.id.butPlayer5A;
import static com.example.android.basketscout.R.id.textView;
public class ScoutActivity extends AppCompatActivity {
Button but1A;
Button but2A;
Button but3A;
Button but4A;
Button but5A;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_scout);
but1A = (Button) findViewById(R.id.but1A);
but2A = (Button) findViewById(R.id.but1A);
but1A.setOnClickListener(new View.OnClickListener() {
public void onClick(View view){
Toast.makeText(getApplicationContext(), "Button 1A clicked", Toast.LENGTH_SHORT).show();
}
});
but2A.setOnClickListener(new View.OnClickListener() {
public void onClick(View view){
Toast.makeText(getApplicationContext(), "Button 2A clicked", Toast.LENGTH_SHORT).show();
}
});
but1A.setOnLongClickListener(new View.OnLongClickListener(){
public void onLongClick (View view) {
Toast.makeText(getApplicationContext(),"Button 1A long clicked", Toast.LENGTH_SHORT).show();
}
});
but2A.setOnLongClickListener(new View.OnLongClickListener(){
public void onLongClick (View view) {
Toast.makeText(getApplicationContext(),"Button 2A long clicked", Toast.LENGTH_SHORT).show();
}
});
}
}
[如果您发现任何错误,例如未关闭的parentheris或不完全正确的变量名称,那么由于我复制/粘贴的某些编辑而导致错误]
答案 0 :(得分:1)
您要查找两次相同的视图,您必须更改代码的这一部分:
but1A = (Button) findViewById(R.id.but1A);
but2A = (Button) findViewById(R.id.but1A);
对此:
but1A = (Button) findViewById(R.id.but1A);
but2A = (Button) findViewById(R.id.but2A);
此外,从布局中删除android:onClick
属性,它是多余的并导致冲突。
<Button
android:id="@+id/but1A"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="1a"/>
<Button
android:id="@+id/but2A"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="2a"/>
答案 1 :(得分:0)
删除xml文件中的onClick输入,如果从xml声明了onClick方法,则无需在Buttons对象上调用setOnClickListener
,而只需使用yourOnClickMethod(View view)
参数创建该方法
答案 2 :(得分:0)
您的代码中存在错误。第一个已经由@Luiz指出,它是视图与按钮对象的绑定:
but2A = (Button) findViewById(R.id.but2A);
此外,这是一个可能对您有所帮助的主题,因为我看到您在xml中为onClick
标记声明了Button
属性:How exactly does the android:onClick XML attribute differ from setOnClickListener?
基本上有两种实现点击侦听器的方法,如果您使用的是setOnClickListener()
,则不需要XML中的onClick
属性,反之亦然。
答案 3 :(得分:0)
问题是你找到两次相同的id:
but1A = (Button) findViewById(R.id.but1A);
but2A = (Button) findViewById(R.id.but1A);
要
but1A = (Button) findViewById(R.id.but1A);
but2A = (Button) findViewById(R.id.but2A);
然后,
对于视图的长按侦听器,请参阅此how to implement a long click listener on a listview
答案 4 :(得分:0)
从中删除onClick属性 按钮布局
并更正此代码
but1A = (Button)findViewById(R.id.but1A);
but2A = (Button)findViewById(R.id.but1A);
要
but1A = (Button)findViewById(R.id.but1A);
but2A = (Button)findViewById(R.id.but2A);