如何从 CardView 中的 TextView 获取文本?

How to get text from TextView inside a CardView?

CardView 中,我有一个 LinearLayout,里面有三个 TextViews,我想从这些 TextView 中获取文本。我的 XML-文件如下所示:

 <LinearLayout
        android:id="@+id/defense"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="1"
        android:orientation="horizontal"
        >

        <android.support.v7.widget.CardView
            android:id="@+id/cardCB"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_gravity="bottom"
            android:layout_weight="1"
            app:cardBackgroundColor="@android:color/transparent"
            app:cardElevation="0dp">

          <LinearLayout
              android:id="@+id/innerLayout"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:orientation="vertical">

              <TextView
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:text="Rannochia"
                  android:textAlignment="center"
                  android:textStyle="bold"/>
              <TextView
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:text="78"
                  android:textAlignment="center"
                  android:textStyle="bold"/>
              <TextView
                  android:layout_width="match_parent"
                  android:layout_height="match_parent"
                  android:text="CB"
                  android:textAlignment="center"
                  android:textStyle="bold"/>

          </LinearLayout>
        </android.support.v7.widget.CardView>
       </LinearLayout>

然后我想迭代 遍历父 LinearLayout 中的所有 CardView 并获取 TextView。像这样:

     for (int i = 0; i < defense.getChildCount(); i++){
        String getName = ((CardView)defense.getChildAt(i)).getText().toString();
        id[i] = getName;
    }

但我无法像这样调用方法 getText().toString();。如何从 CardView 中的这些 TextView 获取文本?

只给TextView的引用

    for (int i = 0; i < defense.getChildCount(); i++){
        String getName = ((TextView)defense.getChildAt(i)).getText().toString();
        id[i] = getName;
    }

这里有很多选择。
1。为您的 TextView 提供 id
2。在 ID 为 innerLayout 的 LinearLayout 中使用 for
3。当您的 UI 是动态的并且您需要从 defense

获取 TextViews 时
for (int i = 0; i < defense.getChildCount(); i++){
        CardView card = defense.getChildAt(i);
        ViewGroup viewGroup = ((ViewGroup)card.getChildAt(0));
        for(int j=0;j<viewGroup.getChildCount();j++){
            String getName = ((TextView)viewGroup.getChildAt(j)).getText().toString();
            id[i] = getName;
        }
    }

它不起作用,因为 textview 在另一个 ViewGroup 中,它是 @+id/innerLayout..

我给你做了一个简单的函数..

private void loopViews(ViewGroup view) {
for (int i = 0; i < view.getChildCount(); i++) {
    View v = view.getChildAt(i);

    if (v instanceof EditText) {
        // will be executed when its edittext
        Log.d("Check", "This is EditText");

    } else if (v instanceof TextView) {
        // will be executed when its textview,, and get the text..
        TextView x = (TextView) v;
        String aa = x.getText().toString();
        Log.d("Check", "This is TextView with text : " +aa);

    } else if (v instanceof ViewGroup) {

        // will be executed when its viewgroup,, and loop it for get the child view..
        Log.d("Check", "This is ViewGroup");
        this.loopViews((ViewGroup) v);
    }
}

你可以像这样使用它..

    LinearLayout def = (LinearLayout) findViewById(R.id.defense);
    loopViews(def);

希望对您有所帮助.. :)