android - 标识一个特定的动态生成的TextView,以便setText
问题描述
我有一个动态生成特定数量的 TextView 的函数。
TextView tv;
EditText et;
public TextView textViewGenerate(final Activity activity, String tag, Integer id) {
tv = new TextView(activity);
GradientDrawable gd = new GradientDrawable();
gd.setColor(0xFFFFFF);
gd.setCornerRadius(4);
gd.setStroke(1, 0xFF757575);
tv.setBackground(gd);
LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT,
1.0f
);
tv.setPadding(7, 9, 0, 0);
tv.setGravity(Gravity.START);
tv.setTextSize(22);
tv.setTag(tag);
tv.setId(id);
tv.setHint("Enter Module Serial Number");
//Click to launch camera
tv.setClickable(true);
tv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Intent intent = new Intent(ct, MctCameraActivity.class);
Intent intent = new Intent(activity, MctCameraActivity.class);
activity.startActivityForResult(intent, 1);
//ct.startActivity(intent);
//ToDo: finish receiving the data from the activityForResult
}
});
lp.setMargins(10, 0, 10, 0);
lp.setMarginStart(10);
lp.setMarginEnd(10);
tv.setLayoutParams(lp);
return tv;
}
}
onClick 启动另一个加载相机以捕获条形码数据的活动。在主要活动中,我创建了 TextViews
final LayoutElements le = new LayoutElements();
mainLayout = (LinearLayout)findViewById(R.id.mctScanPageMain);
for(int i = 0; i < 3; i++) {
mainLayout.addView(le.textViewGenerate(this, "NewID" + i, i));
}
onActivityResult 从相机活动返回值,但问题是它将每个生成的 TextView 设置为具有相同的条形码编号(条形码编号作为字符串返回)。如何修改它,以便在 onActivityResult 中仅更改所选 TextView 的文本?
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1 && resultCode == RESULT_OK && data != null) {
String returnResult = data.getStringExtra("result");
for (int i=0; i < mainLayout.getChildCount(); i++){
TextView tv = (TextView) mainLayout.findViewWithTag("NewID"+i);
if(tv == null) {
break;
} else {
tv.setText(returnResult);
}
}
}
}
解决方案
在 TextView 的点击侦听器中,您可以更改:
Intent intent = new Intent(activity, MctCameraActivity.class);
activity.startActivityForResult(intent, 1);
至
Intent intent = new Intent(activity, MctCameraActivity.class);
intent.putExtra("text_view_tag", tag);
activity.startActivityForResult(intent, 1);
然后将其发送回结果中MctCameraActivity
,因此您可以在onActivityResult
with中使用它getStringExtra
。这样,您将知道启动活动的 TextView 的标签。
或者,您可以使用requestCode
传递给startActivityForResult
来区分文本视图。例如,为文本视图 1 传递请求代码 1,为文本视图 2 传递请求代码 2 等,并requestCode
在onActivityResult
.
推荐阅读
- python - Selenium 无法点击网页 python 的按钮
- excel - IsEmpty 对于空范围和单元格内容为空白的范围均返回 True,如何区分?
- firebase - 如何使用 Firebase Firestore 进行一次性简单查询?
- reactjs - React 状态依赖于其他状态
- google-chrome-extension - 是否可以将自定义身份验证库注入 chrome 扩展后台脚本?
- r - 在 R 中循环以从数据帧中读取数据
- python - Python 多处理共享变量
- android - Android使用adb跳过chrome欢迎屏幕
- python - 如何将函数应用于熊猫中每一行的对象属性
- c# - 计算位置的唯一组合