Android - 从一个 textView 获取文本并使用 Android 数据绑定设置到另一个

Android - Get text from one textView and set to another with Android Data Binding

如何将文本从一个 textView 设置到另一个? 如果我这样尝试:

        <TextView
            android:id="@+id/textView1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="SomeText" />

        <TextView
            android:id="@+id/textView2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{textView1.getText()}" />

我遇到错误:

            Found data binding errors.
        ****/ data binding error ****msg:Identifiers must have user defined types from the XML file. textView1 is missing it
        loc:51:32 - 51:41
        ****\ data binding error ****

我尝试了很多选择,但没有成功。在此先感谢您的帮助!

尝试这样做:

XML:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <data>
        <variable
            name="activity"
            type="com.example.myapplication.MainActivity" />
    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/text_view_1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{activity.text1}"
            android:textColor="@android:color/black"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

        <TextView
            android:id="@+id/text_view_2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{activity.text2}"
            android:textColor="@android:color/black"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/text_view_1" />

    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

Activity:

class MainActivity : AppCompatActivity() {

    val text1 = "Test text 1"
    val text2 = text1

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
        binding.activity = this
    }
}

您可以做到这一点,使用 BindingAdapter,提供您对它的看法

在 Kotlin 中就像

object Bindings { 

  @JvmStatic
  @BindingAdapter("app:referencedTextView")
  fun getTextFromReferencedTextView(view: TextView, anotherTextView: TextView) {
      view.text = anotherTextView.text
  }

}

并在目标 textView 中:

app:referencedTextView="@{anotherTextView}"

对我来说这很好用

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">

    <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

        <TextView
                android:id="@+id/textView1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="something" />

        <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@{textView1.text}" />

    </LinearLayout>
</layout>


class SimpleFragment : Fragment() {

    companion object {
        fun newInstance() = SimpleFragment()
    }

    private lateinit var binding: SimpleFragmentBinding

    override fun onCreateView(
        inflater: LayoutInflater, container: ViewGroup?,
        savedInstanceState: Bundle?
    ): View? {
        String
        binding = SimpleFragmentBinding.inflate(inflater)
        return binding.root
    }

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        textView1.text = "something else"
    }
}