我的MainActivity中有一个大小为5的按钮数组。我没有为布局创建任何xml文件,而是从java类本身创建了它。我想转到DetailsActivity(另一个活动),它只有一个textView,它将在我在MainActivity中单击以转到DetailsAcitvity的按钮上显示文本。按钮的ID为1、2、3、4和5。文本为“ A”,“ B”,“ C”,“ D”和“ E”。
我正在尝试在MainActivity.java中使用以下代码。
for (i = 0; i < n; i++) {
button[i].setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
clicked(view);
selected = button[i].getText().toString();
}
}
);
}
public void clicked(View view) {
Intent intent = new Intent(this, DetailsActivity.class);
intent.putExtra("name", selected);
startActivity(intent);
}
i和selected是整数和类MainActivty的字符串的私有成员。
以下代码来自DetailsActivity.java的onCreate()方法。
Bundle data = getIntent().getExtras();
if(data == null)
return;
String name = data.getString("name");
TextView name = findViewById(R.id.name);
name.setText(name);
DetailsActivity具有xml文件的布局。
问题可能在其中
selected = button[i].getText().toString();
任何帮助都会很棒。
答案 0 :(得分:0)
我认为您的问题是您正在使用成员变量“ i”来存储for循环索引。因此,当您单击按钮时,您将尝试访问不存在的按钮6,并且我想您会获得索引超出范围的异常?
要解决此问题,请删除成员变量“ i”,而在for循环本身中声明变量“ i”。
之前:
private int i;
for (i = 0; i < n; i++) {
button[i].setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
clicked(view);
selected = button[i].getText().toString();
}
}
);
}
之后:
for (int i = 0; i < n; i++) {
button[i].setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
clicked(view);
selected = button[i].getText().toString();
}
}
);
}
答案 1 :(得分:0)
字符串字母[] = {“ A”,“ B”,“ C”,“ D”,“ E”};
在oncreate函数中编写以下代码:
LinearLayout answer_Layout = new LinearLayout(this);
answer_Layout.setOrientation(LinearLayout.VERTICAL);
LayoutParams linLayoutParam = new LayoutParams(LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
setContentView(answer_Layout, linLayoutParam);
for (int i = 0; i < letters.length; i++) {
LayoutParams linLayoutParam1 = new LayoutParams(100, ViewGroup.LayoutParams.WRAP_CONTENT);
linLayoutParam1.setMargins(0,10,0,0);
Button b = new Button(this);
b.setText(letters[i]);
b.setLayoutParams(linLayoutParam1);
answer_Layout.addView(b);
final int finalI = i;
b.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent in = new Intent(MainActivity.this, SecondActivity.class);
in.putExtra("item", letters[finalI]+"");
startActivity(in);
}
});
}
**in second acvtivity for getting data :**
if(getIntent()!=null){
textView.setText("u click "+ getIntent().getStringExtra("item")+"");
}
答案 2 :(得分:0)
您可以简单地减少代码来实现此目的。尝试下面的代码
public class MainActivity extends AppCompatActivity implements Button.OnClickListener{
private Button b1,b2,b3,b4,b5;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_linear_);
//Button intialization in java code...
b1.setOnClickListener(this);
b2.setOnClickListener(this);
b3.setOnClickListener(this);
b4.setOnClickListener(this);
b5.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v instanceof Button)
{
this.startActivity(new Intent(MainActivity.this,DetailActivity.class).putExtra("KEY",((Button) v).getText().toString()));
}
}
详细活动
String value = getIntent() != null ? getIntent().getExtras().getString("KEY",""):""; //You can get the value.
已编辑
for(int i = 0;i < BUTTON_LENGTH;i++)
{
Button b = new Button(this);
b.setId(i);
b.setOnClickListener(this);
}