首页 > 解决方案 > 如何更改弹出窗口 TextView 中的文本?

问题描述

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_check_attendance);

    Intent intent = getIntent();



    final ArrayList<String> names = intent.getStringArrayListExtra("names");
    final ListView name_list = findViewById(R.id.name_list);
    final ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
            android.R.layout.simple_list_item_1, names);
    name_list.setAdapter(adapter);



    name_list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Log.i("Name",names.get(i));

            LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
            View popupview = inflater.inflate(R.layout.popup_window, null);


            int width = LinearLayout.LayoutParams.WRAP_CONTENT;
            int height = LinearLayout.LayoutParams.WRAP_CONTENT;
            popupWindow  = new PopupWindow(popupview, width, height, true);
            popupWindow.showAtLocation(view, Gravity.CENTER, 0,0);



        }
    });
}

在上面的代码中,一切都很好,除了我想将弹出窗口文本设置为列表视图中的单击元素。

我使用Log.i(),并且正在打印单击的元素,但是当我尝试将文本设置为此单击的元素时,例如:

TextView sub_name = findViewById(R.id.subject_name);
sub_name.setText(names.get(i));

我收到以下错误:

java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.TextView.setText(java.lang.CharSequence)”

弹出窗口的 XML:

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/close"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="161dp"
        android:layout_marginTop="587dp"
        android:layout_marginEnd="162dp"
        android:layout_marginBottom="96dp"
        android:onClick="quit"
        android:text="Close"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/subject_name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="176dp"
        android:layout_marginTop="258dp"
        android:layout_marginEnd="176dp"
        android:layout_marginBottom="455dp"
        android:text="TextView"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>

标签: javaandroid

解决方案


在你给 View 充气之后放上它

LayoutInflater inflater = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
View popupview = inflater.inflate(R.layout.popup_window, null);
int width = LinearLayout.LayoutParams.WRAP_CONTENT;
int height = LinearLayout.LayoutParams.WRAP_CONTENT;
popupWindow  = new PopupWindow(popupview, width, height, true);
popupWindow.showAtLocation(view, Gravity.CENTER, 0,0);
TextView sub_name = popupview.findViewById(R.id.subject_name);
sub_name.setText(names.get(i));

推荐阅读