android - 如何在 android 中动态创建的 TableLayout 中设置 EditText 列表的 Id

标签 android android-edittext android-tablelayout

我正在以编程方式创建一个混合了 TextView 和 EditText 的动态 TableLayout。该 TextView 是从应用程序的 sqlite 数据库中获取的。 TableLayout 的最后一列由状态设置为 Invisible 的 EditText 组成。我想根据 TableLayout 行上的 onClick 将 TableLayout 特定行的 EditText 状态设置为 Visible 。 onClick 之后,EditText 应该可见,我想将在该 editText 中创建的条目存储在数据库中。

我为此所做的尝试代码如下:

        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);


        }

我在 How to Set Id in EditText programmatically in Android 中发现了类似的问题 和 Android: Set Edit text or text view id Programmatically其中,提供了使用 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>

2) 然后以编程方式创建 View 并设置其 id:

EditText et = new EditText(getContext());
et.setId(R.id.my_custom_id);

这应该可以解决问题。

编辑:如果您不知道要创建的 View 数量并且无法使用 xml 文件中的 id,您还可以执行以下操作:

et.setId(View.generateViewId());

generateViewId() 方法为您创建一个随机的唯一 ID。

关于android - 如何在 android 中动态创建的 TableLayout 中设置 EditText 列表的 Id,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43931332/

相关文章:

android - 我可以在 Xamarin.Forms 中重新排序 Run 上的 ListView 项目吗?

android - 更新 edittext 时会发生什么事件?

java - Android Studio 如果输入为 Decimal 应用程序崩溃

java - 如何在Android中的tablelayout上进行快速滚动

android - 清除选项卡布局中的所有 View ?

android - 如何从线程开始在 Activity 中播放音乐?

android - 为 Button 的文本颜色设置 alpha

android - 直接从计算机在 Android 设备上打字?

Android:处理 InputFilter 上的退格键

java - 如何使回收器 View 水平且类似于表格布局?