更改使用按钮点击TextView的文本中的Android
问题描述:
我想更改按钮上的点击textView
文本。活动中可以有多个按钮。主要目的是改变按钮上的水果名称,点击任一按钮。 例如:按钮1点击更改名称,按钮2点击下一个名称,按钮3点击下一个名称等。我正在尝试如下给出,但名称不会改变。更改使用按钮点击TextView的文本中的Android
主要活动
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private TextView sentence_etx;
private Button btn_1,btn_2;
private String[] names = { "Apple","Mango","Cherry","Banana","Extra"};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sentence_etx = (TextView) findViewById(R.id.etx_sentence);
btn_1 = (Button) findViewById(R.id.btn_1);
btn_2 = (Button) findViewById(R.id.btn_2);
for (int i=0;i<=names.length;i++) {
work(i);
}
}
private void work(final int i) {
btn_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sentence_etx.setText(names[i]);
}
});
btn_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
sentence_etx.setText(names[i]);
}
});
}
}
XML
<?xml version="1.0" encoding="utf-8"?>
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.awais.test2.MainActivity">
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
<TextView
android:layout_marginTop="50dp"
android:layout_marginRight="30dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/etx_sentence"
android:text="Names......" />
<LinearLayout
android:gravity="center"
android:layout_marginTop="100dp"
android:layout_height="wrap_content"
android:layout_width="match_parent">
<Button
android:layout_height="50dp"
android:layout_width="50dp"
android:id="@+id/btn_1"
android:text="1"/>
<Button
android:layout_height="50dp"
android:layout_width="50dp"
android:id="@+id/btn_2"
android:text="2"/>
<Button
android:layout_height="50dp"
android:layout_width="50dp"
android:id="@+id/btn_3"
android:text="3"/>
</LinearLayout>
</LinearLayout>
</RelativeLayout>
答
删除for
因为监听器需要设置一次
for (int i=0;i<=names.length;i++) {
work(i);
}
所以work
的签名将是
private void work() {
,并调用它从onCreate
一次声明i
全球,把一个if
条件而设定的下一个值,以避免指数势必异常
public class MainActivity extends AppCompatActivity {
private int i=0;
// code
@Override
protected void onCreate(Bundle savedInstanceState) {
// code
btn_1 = (Button) findViewById(R.id.btn_1);
btn_2 = (Button) findViewById(R.id.btn_2);
// initialize listener
work();
}
private void work() {
btn_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// check bounds
if (++i<names.length) {
sentence_etx.setText(names[i]);
}
// else{ // uncomment to reset the value of i
// i=0;
// }
}
});
btn_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (++i<names.length) {
sentence_etx.setText(names[i]);
}
// else{ // uncomment to reset the value of i
// i=0;
// }
}
});
}
}
你所有buttons
都在做同样的工作,所以你可以简单地有listener
并将其应用在所有button
对象,而不是创建单独的匿名听众和
public class MainActivity extends AppCompatActivity {
private TextView sentence_etx;
private Button btn_1,btn_2;
private String[] names = { "Apple","Mango","Cherry","Banana","Extra"};
private int i=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sentence_etx = (TextView) findViewById(R.id.etx_sentence);
btn_1 = (Button) findViewById(R.id.btn_1);
btn_2 = (Button) findViewById(R.id.btn_2);
// initialize listener
btn_1.setOnClickListener(listner);
btn_2.setOnClickListener(listner);
}
OnClickListener listner=new OnClickListener() {
@Override
public void onClick(View v) {
// check bounds
if (++i<names.length) {
sentence_etx.setText(names[i]);
}
// else{ // uncomment to reset the value of i
// i=0;
// }
// note you can also add some conditional statement
// to check which button is clicked using v.getId();
}
};
}
答
你正在重置您的按钮的每次调用work
时间OnClickListener
。如果你希望他们显示不同的名字,你不能分配他们相同的OnClickListener
(这是你现在所做的)。
你可以做的是改变work
签名接收按钮作为参数,设置监听器上按钮。然后,在onCreate
方法,您决定哪名与哪个按钮
答
你只需要设置OnClickListener
一次
public class MainActivity extends AppCompatActivity {
private TextView sentence_etx;
private Button btn_1,btn_2;
private String[] names = { "Apple","Mango","Cherry","Banana","Extra"};
private int curIndex = 0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sentence_etx = (TextView) findViewById(R.id.etx_sentence);
btn_1 = (Button) findViewById(R.id.btn_1);
btn_2 = (Button) findViewById(R.id.btn_2);
btn_1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (curIndex == names.length - 1) {
curIndex = 0;
}
sentence_etx.setText(names[curIndex]);
curIndex++;
}
});
btn_2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (curIndex == names.length - 1) {
curIndex = 0;
}
sentence_etx.setText(names[curIndex]);
curIndex++;
}
});
}
}
'名称[0],名称[1]'应该是通用的。目的是在单击任何按钮时更改名称(数组中的下一个名称)。 – Amar
@Amar更新了代码 – Junyu
@Amar它帮助你解决了你的问题吗?如果是这样,请标记为已接受的答案。 – Junyu