【问题标题】:How to assign a text dynamically to a particular textview . (Android)如何将文本动态分配给特定的 textview 。 (安卓)
【发布时间】:2014-12-22 14:40:07
【问题描述】:

我的布局中有很多文本视图。

当用户点击按钮时,它应该将edittext中的文本设置为textview1。

如果用户再次单击编辑文本中的文本,则应在 textview2 中设置,以 textview3 textview4.......

当用户单击按钮时如何转到下一个文本视图

布局文件

     ...
    ...
    ...
    ..
<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_weight="50"
    android:orientation="vertical" 
    android:id="@+id/tvLayout">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/textView3"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textView4"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/textView5"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/textView6"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:orientation="horizontal" >

        <TextView
            android:id="@+id/textView7"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/textView8"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <TextView
            android:id="@+id/textView9"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textAppearance="?android:attr/textAppearanceMedium" />
    </LinearLayout>
</LinearLayout>
...
...
...
..

and my activity file

初始化..

    myLayout = (LinearLayout) findViewById(R.id.tvLayout);
    myTextViewList = new ArrayList<TextView>();
    counter =0;



    for (int i = 0; i < myLayout.getChildCount(); i++)
        if (myLayout.getChildAt(i) instanceof TextView)
            myTextViewList.add((TextView) myLayout.getChildAt(i)); 

设置文本..

          TextView tv = myTextViewList.get(counter);
            tv.setText(ss);

【问题讨论】:

    标签: android textview


    【解决方案1】:

    为你的布局 ViewGroup 运行这个,所有的 TextViews 都将在 mTextViews 中。

    List<TextView> mTextViews = new ArrayList();
    
    void getAllTextViews(ViewGroup v) {
        for (int i = 0; i < v.getChildCount(); i++) {
        View child = v.getChildAt(i);
        if(child instanceof ViewGroup)
            getAllTextViews((ViewGroup)child);
        else if(child instanceof TextView)
            mTextViews.add((TextView)child);
        }
    }
    

    之后,您可以通过通用迭代器在 TextViews 中设置文本。

    【讨论】:

    • 我只有一个按钮。用户在编辑文本中输入内容然后我验证它是否正确,它将设置为 textview1 并且用户在相同的编辑文本中输入内容并单击我验证的相同按钮并相应地设置文本..
    • 这是我的复制粘贴错误,抱歉。请参阅编辑后的答案。
    【解决方案2】:

    试试这个:

    private ArrayList<TextView> getChildTextViews(LinearLayout myLayout)
    {
      for(int i = 0; i < myLayout.getChildCount(); i++)
      {
        View child = myLayout.getChildAt(i);
        if(child instanceof LinearLayout)
          getChildTextViews((LinearLayout) child);
        else if(child instanceof TextView)
          myTextViewList.add((TextView)child);
      }
    }
    
    
    
    LinearLayout myLayout = (LinearLayout) findViewById(R.id.lineraLayout);
    ArrayList<TextView> myTextViewList = getChildTextViews(myLayout);
    int counter = 0;
    Button button= (Button) findViewById(R.id.buttonId);
    button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
         EditText et=(EditText)findViewById(R.id.editText);
         String txt = et.getText().toString();
         TextView tv = myTextViewList.get(counter);
         tv.setText(txt);
         counter++;
      }
    });
    

    这是您获取布局 ID 的地方:

    <LinearLayout android:id="@+id/linearLayout" >
       //Here is where your TextViews would be declared
    </LinearLayout>
    

    【讨论】:

    • 请留言投反对票!
    • 您是否将所有 TextView 直接作为 LinearLayout 的子级?
    • 答案是针对上一个问题。无论如何,我已经更新了我的答案。希望对您有所帮助!
    • 它运行良好,但我有不同布局的文本视图,
    • 现在有什么关系?此代码将找到所有 TextView。
    猜你喜欢
    • 2014-02-04
    • 1970-01-01
    • 1970-01-01
    • 2017-07-25
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    相关资源
    最近更新 更多