从Programatically创建TextView和EditText

时间:2016-11-16 19:34:04

标签: android android-edittext textview programmatically-created

我在LinearLayout中创建了1个LinearLayout,它以编程方式包含1个EditText和1个TextView,我需要从EditText和TextView获取文本。这是我的代码:

main.xml中:

for(int j = 0; j < NUM_COLS; j++)
{
    for(int i = 0; i < NUM_ROWS; i++)
    {
        sumColumns += scores[i][j];
    }

MainActivity.java:

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:padding="10dp" >

        <LinearLayout
            android:id="@+id/result"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_gravity="right"
            android:gravity="right"
            android:orientation="vertical" >
        </LinearLayout>
    </ScrollView>

请帮帮我。

我编辑了我的问题

实际上,上面的情况发生在我点击addItem()时,我的应用程序将显示新的TextView和EditText,所以如果这个过程完成,并移动到下一个Fragment以显示TextViews和EditTexts的所有文本,如下所示StringBuilder的:

    linearLayout = (LinearLayout) view.findViewById(R.id.result);

    .......

 public void addItem(){
    LinearLayout childLayout = new LinearLayout(context);
    LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    childLayout.setLayoutParams(linearParams);
    childLayout.setTag(item_name);
    childLayout.setOrientation(LinearLayout.HORIZONTAL);


    TextView item = new TextView(context);
    item.setTag(item_name);
    item.setText(item_name);
    item.setTextSize(16);
    item.setGravity(Gravity.LEFT);
    LinearLayout.LayoutParams llp1 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    llp1.setMargins(0, 0, 15, 0);
    item.setLayoutParams(llp1);
    item.setTextColor(context.getResources().getColor(android.R.color.black));

    EditText quantity = new EditText(context);
    quantity.setText(nama_barang);
    quantity.setTextSize(16);
    quantity.setGravity(Gravity.CENTER_HORIZONTAL);
    LinearLayout.LayoutParams llp2 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
    llp2.setMargins(10, 0, 15, 0);
    quantity.setLayoutParams(llp2);
    quantity.setTextColor(context.getResources().getColor(android.R.color.black));

    childLayout.addView(item);
    childLayout.addView(quantity);
    linearLayout.addView(childLayout);
 }

帮助我。

4 个答案:

答案 0 :(得分:0)

你想这样吗?

get :action, params: { format: :json, ... }

答案 1 :(得分:0)

如上所述,使用item.getText().toString();就是你所需要的,尽管如此,我确实认为你的问题在于你在循环中声明你的观点,通过在你赢得的代码的任何地方稍后在本地做它&# 39;得到任何文字。

尝试将您的视图声明为全局变量或在循环之外执行,例如;

//....

TextView item;
EditText quantity;    


for(int i = 0; i < cartCount; i++) {
LinearLayout childLayout = new LinearLayout(context);
LinearLayout.LayoutParams linearParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
childLayout.setLayoutParams(linearParams);
childLayout.setTag(item_name);
childLayout.setOrientation(LinearLayout.HORIZONTAL);


item = new TextView(context);
item.setTag(item_name);
item.setText(item_name);
item.setTextSize(16);
item.setGravity(Gravity.LEFT);
LinearLayout.LayoutParams llp1 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
llp1.setMargins(0, 0, 15, 0);
item.setLayoutParams(llp1);
item.setTextColor(context.getResources().getColor(android.R.color.black));

quantity = new EditText(context);
quantity.setText(nama_barang);
quantity.setTextSize(16);
quantity.setGravity(Gravity.CENTER_HORIZONTAL);
LinearLayout.LayoutParams llp2 = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
llp2.setMargins(10, 0, 15, 0);
quantity.setLayoutParams(llp2);
quantity.setTextColor(context.getResources().getColor(android.R.color.black));

childLayout.addView(item);
childLayout.addView(quantity);
linearLayout.addView(childLayout);

}

另一方面,通过查看代码,您是否尝试创建EditText和TextViews列表?如果是这样,最好考虑将ListView与自定义项目一起使用; Here你可以找到一个很好的教程做同样的事情。

答案 2 :(得分:0)

这感觉就像你应该看一个适配器视图,例如recyclerview。您可能会开始使用linearlayout看到一些性能问题。

反正。您可以在将视图添加到线性布局时将其添加到列表中。

List<TextView> items = new LinkedList<>();
List<EditText> quantities = new LinkedList<>();  
for(int i = 0; i < cartCount; i++) {
   ...
    childLayout.addView(item);
    childLayout.addView(quantity);
    items.add(item);
    quantities.add(quantity);
    linearLayout.addView(childLayout);
}

然后循环浏览你的观点

for (TextView textView : items) {

}

for (EditText editText : quantities) {

}

答案 3 :(得分:-1)

[1]