如何设置Id';s表示android中动态创建的TableLayout中的EditText列表
我正在以编程方式创建一个混合了TextView和EditText的动态表格布局。此文本视图从应用程序的sqlite数据库中获取。TableLayout的最后一列由状态设置为不可见的EditText组成。我想基于对TableLayout行的单击,将TableLayout特定行的EditText的状态设置为可见。onClick之后,EditText应该是可见的,我想将在该EditText中创建的条目存储在数据库中 我的尝试代码如下:如何设置Id';s表示android中动态创建的TableLayout中的EditText列表,android,android-edittext,android-tablelayout,Android,Android Edittext,Android Tablelayout,我正在以编程方式创建一个混合了TextView和EditText的动态表格布局。此文本视图从应用程序的sqlite数据库中获取。TableLayout的最后一列由状态设置为不可见的EditText组成。我想基于对TableLayout行的单击,将TableLayout特定行的EditText的状态设置为可见。onClick之后,EditText应该是可见的,我想将在该EditText中创建的条目存储在数据库中 我的尝试代码如下: List<Details> custo
List<Details> customerDetailList = db.getAllCustomers(routeId);
Details customerDetails;
TableLayout stk = (TableLayout) findViewById(R.id.tableLayout1);
stk.removeAllViews();
TableRow tbrow0 = new TableRow(this);
TextView tv0 = new TextView(this);
tv0.setText("Sl.No.");
tv0.setTextColor(Color.BLACK);
tv0.setTypeface(null, Typeface.BOLD);
//tv0.setTextSize(20);
tv0.setPadding(5, 5, 5, 5);
tbrow0.addView(tv0);
TextView tv1 = new TextView(this);
tv1.setText(" Patron ID ");
tv1.setTextColor(Color.BLACK);
tv1.setTypeface(null, Typeface.BOLD);
//tv1.setTextSize(20);
tv1.setPadding(5, 5, 5, 5);
tbrow0.addView(tv1);
TextView tv2 = new TextView(this);
tv2.setText(" Name ");
tv2.setTypeface(null, Typeface.BOLD);
//tv2.setTextSize(20);
tv2.setTextColor(Color.BLACK);
tv2.setPadding(5, 5, 5, 5);
tv2.setGravity(Gravity.CENTER);
tbrow0.addView(tv2);
TextView tv3 = new TextView(this);
tv3.setText(" Requested ");
tv3.setTextColor(Color.BLACK);
tv3.setTypeface(null, Typeface.BOLD);
//tv3.setTextSize(20);
tv3.setPadding(5, 5, 5, 5);
tv3.setGravity(Gravity.CENTER);
tbrow0.addView(tv3);
TextView tv4 = new TextView(this);
tv4.setText(" Supplied ");
tv4.setTypeface(null, Typeface.BOLD);
//tv4.setTextSize(20);
tv4.setTextColor(Color.BLACK);
tv4.setPadding(5, 5, 5, 5);
tbrow0.addView(tv4);
tbrow0.setBackgroundResource(R.color.colorLightGray);
stk.addView(tbrow0);
for (int row = 0, j = 1; row < customerDetailList.size(); row++, j++) {
customerDetails = customerDetailList.get(row);
TableRow tbrow = new TableRow(this);
tbrow.setClickable(true);
final TextView t1v = new TextView(this);
t1v.setText("" + j);
t1v.setTextColor(Color.BLACK);
t1v.setGravity(Gravity.CENTER);
t1v.setPadding(5, 5, 5, 5);
tbrow.addView(t1v);
TextView t2v = new TextView(this);
t2v.setText("" + customerDetails.getcId());
t2v.setTextColor(Color.BLACK);
t2v.setGravity(Gravity.CENTER);
t2v.setPadding(5, 5, 5, 5);
tbrow.addView(t2v);
TextView t3v = new TextView(this);
t3v.setText("" + customerDetails.getName());
t3v.setTextColor(Color.BLACK);
t3v.setGravity(Gravity.CENTER);
t3v.setPadding(5, 5, 5, 5);
tbrow.addView(t3v);
TextView t4v = new TextView(this);
t4v.setText("" + customerDetails.getRequested());
t4v.setTextColor(Color.BLACK);
t4v.setGravity(Gravity.CENTER);
t4v.setPadding(5, 5, 5, 5);
tbrow.addView(t4v);
final EditText t5v = new EditText(this);
// t5v.setHint(0);
t5v.setId(j);
t5v.setVisibility(View.INVISIBLE);
t5v.setTextColor(Color.BLACK);
t5v.setGravity(Gravity.CENTER);
t5v.setPadding(5, 5, 5, 5);
tbrow.addView(t5v);
tbrow.setBackgroundResource(R.color.colorWhite);
tbrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TableRow tr1=(TableRow)v;
TextView tv1= (TextView)tr1.getChildAt(0);
//Get the integer value of tv1 to make the corresponding edittext to be visible
t5v.setVisibility(View.VISIBLE);
Toast.makeText(getApplicationContext(),tv1.getText().toString(),Toast.LENGTH_SHORT).show();
}
});
stk.addView(tbrow);
}
List customerDetailList=db.getAllCustomers(routeId);
详情客户详情;
TableLayout stk=(TableLayout)findviewbyd(R.id.tableLayout1);
stk.removeallview();
TableRow tbrow0=新的TableRow(此);
TextView tv0=新的TextView(此);
tv0.setText(“序号”);
tv0.setTextColor(Color.BLACK);
tv0.setTypeface(null,Typeface.BOLD);
//tv0.setTextSize(20);
tv0.setPadding(5,5,5,5);
tbrow0.addView(tv0);
TextView tv1=新的TextView(本);
tv1.setText(“用户ID”);
tv1.setTextColor(Color.BLACK);
tv1.setTypeface(null,Typeface.BOLD);
//tv1.setTextSize(20);
tv1.设置填充(5,5,5,5);
tbrow0.addView(tv1);
TextView tv2=新的TextView(本);
tv2.setText(“名称”);
tv2.setTypeface(null,Typeface.BOLD);
//tv2.setTextSize(20);
tv2.setTextColor(Color.BLACK);
tv2.设置填充(5,5,5,5);
tv2.setGravity(重心);
tbrow0.addView(tv2);
TextView tv3=新的TextView(本);
tv3.setText(“被请求”);
tv3.setTextColor(Color.BLACK);
tv3.setTypeface(null,Typeface.BOLD);
//tv3.setTextSize(20);
tv3.setPadding(5,5,5,5);
tv3.setGravity(重心);
tbrow0.addView(tv3);
TextView tv4=新的TextView(本);
tv4.setText(“已提供”);
tv4.setTypeface(null,Typeface.BOLD);
//tv4.setTextSize(20);
tv4.setTextColor(Color.BLACK);
tv4.设置填充(5,5,5,5);
tbrow0.addView(tv4);
tbrow0.setBackgroundResource(R.color.colorLightGray);
stk.addView(tbrow0);
对于(int row=0,j=1;row
我发现有人问过类似的问题
其中,提供了利用editText.setId(i)的解决方案,其中i是任意整数值。但这对我的情况没有帮助。您可以在xml文件中创建一个自定义id,并使用
setId()
方法设置该id。以下是执行此操作的步骤:
1) 在res/values
目录下创建文件ids.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<item name="my_custom_id" type="id" />
</resources>
这应该能奏效
编辑:如果您不知道要创建的视图数量,并且无法使用xml文件中的id,也可以执行以下操作:
et.setId(View.generateViewId());
generateViewId()
方法为您创建一个随机唯一id。我按照以下步骤为编程创建的EditText设置id,并检索在EditText中输入的数据
步骤1:将edittext和int变量作为全局声明
int idOfEditText;
EditText t5v;
步骤2:将editText的Id设置为
t5v = new EditText(this);
t5v.setId(Integer.valueOf(j)); //I tried with just j being declared as t5v.setId(j); but it was showing up error with the suggestion as Expected resource of type id in android studio. I have made int variable **j** to loop till list.size()
步骤3:使用
tbrow.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TableRow tr1=(TableRow)v;
TextView tv1= (TextView)tr1.getChildAt(0);
//Get the integer value of tv1 to make the corresponding edittext to be visible
idOfEditText = Integer.valueOf(tv1.getText().toString());
t5v = (EditText) findViewById(idOfEditText);
}
});
步骤4:编辑文本中输入的数据可以通过
t5v = (EditText) findViewById(idOfEditText);
String value = t5v.getText().toString();
Toast.makeText(this, "You entered: "+value, Toast.LENGTH_SHORT).show();
谢谢你的回复。但我想创建EditText列表,并以编程方式将ID设置为它。我无法使用xml文件设置EditText的id。因为我不知道可以创建的EditText的数量,因为它取决于我从中提取以显示reco的表中存在的记录的数量
t5v = (EditText) findViewById(idOfEditText);
String value = t5v.getText().toString();
Toast.makeText(this, "You entered: "+value, Toast.LENGTH_SHORT).show();