如何从另一Activity动态向独立Activity添加带数据的TextView
从一个Activity传递信息到另一个并动态添加TextView展示
我来帮你搞定这个需求!要实现这个功能咱们分两大步骤:在源Activity中传递数据,以及在目标Activity中接收数据并动态创建TextView展示,结合你给出的代码片段,具体实现如下:
第一步:在源Activity中传递输入数据
假设你当前的代码是在一个用于输入数据的Activity(比如叫InputActivity)里,咱们补全OnClick方法,通过Intent把用户输入的内容传递到目标Activity:
public void OnClick(View v) { // 获取用户输入的各项数据 String max_bpm_in = max_bpm.getText().toString(); String min_bpm_in = min_bpm.getText().toString(); String avg_speed_in = avg_speed.getText().toString(); String date_in = date.getText().toString(); // 创建Intent,指定跳转的目标Activity(这里假设目标Activity叫LogDisplayActivity) Intent intent = new Intent(this, LogDisplayActivity.class); // 用键值对的形式把数据存入Intent intent.putExtra("KEY_MAX_BPM", max_bpm_in); intent.putExtra("KEY_MIN_BPM", min_bpm_in); intent.putExtra("KEY_AVG_SPEED", avg_speed_in); intent.putExtra("KEY_DATE", date_in); // 启动目标Activity startActivity(intent); }
第二步:在目标Activity中接收数据并动态添加TextView
对应你布局activity_log的目标Activity(LogDisplayActivity),咱们在onCreate方法里接收传递过来的数据,然后逐个创建TextView并添加到LinearLayout中:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_log); // 获取布局中的LinearLayout容器 LinearLayout mLayout = findViewById(R.id.linear_layout_logbook); // 获取传递过来的Intent和数据 Intent receivedIntent = getIntent(); String maxBpm = receivedIntent.getStringExtra("KEY_MAX_BPM"); String minBpm = receivedIntent.getStringExtra("KEY_MIN_BPM"); String avgSpeed = receivedIntent.getStringExtra("KEY_AVG_SPEED"); String recordDate = receivedIntent.getStringExtra("KEY_DATE"); // 动态创建TextView并设置内容、样式,添加到布局中 // 1. 日期TextView TextView dateTextView = new TextView(this); dateTextView.setText("记录日期:" + recordDate); dateTextView.setTextSize(18); dateTextView.setPadding(0, 20, 0, 10); // 设置上下内边距,让排版更舒适 mLayout.addView(dateTextView); // 2. 最大心率TextView TextView maxBpmTextView = new TextView(this); maxBpmTextView.setText("最大心率:" + maxBpm + " BPM"); maxBpmTextView.setTextSize(16); mLayout.addView(maxBpmTextView); // 3. 最小心率TextView TextView minBpmTextView = new TextView(this); minBpmTextView.setText("最小心率:" + minBpm + " BPM"); minBpmTextView.setTextSize(16); mLayout.addView(minBpmTextView); // 4. 平均速度TextView TextView avgSpeedTextView = new TextView(this); avgSpeedTextView.setText("平均速度:" + avgSpeed); avgSpeedTextView.setTextSize(16); avgSpeedTextView.setPadding(0, 10, 0, 20); mLayout.addView(avgSpeedTextView); }
一些注意事项
- 别忘了在
AndroidManifest.xml中注册你的目标Activity(LogDisplayActivity),否则启动时会抛出异常。 - 如果需要传递复杂数据(比如自定义实体类),可以让类实现
Parcelable或Serializable接口,再通过Intent传递。 - 你还可以给动态创建的TextView设置更多样式,比如文字颜色、背景、字体等,让展示效果更美观,例如:
dateTextView.setTextColor(getResources().getColor(R.color.primary_text));
内容的提问来源于stack exchange,提问作者Garvan Doyle
相关产品推荐
相关产品推荐

