如何将单击的按钮上的文本传递给另一个活动?

时间:2018-07-15 10:47:01

标签: android

我的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();

任何帮助都会很棒。

3 个答案:

答案 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);
    }