首页 > 解决方案 > 编辑弹出窗口的标题

问题描述

我有这个应用程序,列表是基本的ExpandableListView,我正在为每个项目添加弹出窗口按钮,我怎样才能将项目名称添加到弹出窗口的标题中?例如。当您单击香蕉时,我想打开带有标题香蕉的弹出窗口。检查下面的代码,我添加了 java 文件和 xml 文件。

应用图片

JAVA 文件 PopUpDialog.java

  package com.example.test;

 import android.app.Dialog;
 import android.content.Context;

 import androidx.annotation.NonNull;


public class PopupDialog extends Dialog {

private Context context;

public PopupDialog(@NonNull Context context) {
    super(context, R.style.NoActionBarDialog);
    this.context = context;

}

@Override
public void onBackPressed() {
    //do nothing <----- only this if you want to forbid the user to exit the dialog with the back button,
    // ↓
    // else don't override this method
}

}

XML 文件 popup.xml

<LinearLayout              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="wrap_content"
android:orientation="vertical"
android:paddingLeft="50dp"
android:paddingRight="50dp"
>

<TextView
    android:id="@+id/txtTitle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/Grey"
    android:paddingStart="@dimen/config_headline_padding_start"
    android:paddingTop="10dp"
    android:paddingEnd="@dimen/config_headline_padding_end"
    android:paddingBottom="10dp"
    android:text="Title"
    android:textColor="@color/White"
    android:textSize="@dimen/config_dialog_title_fontsize" />

<LinearLayout
    android:orientation="horizontal"
    android:id="@+id/orangeBar"
    android:layout_width="match_parent"
    android:layout_height="@dimen/config_section_bottombar_height"
    android:layout_alignParentBottom="false"
    android:layout_below="@+id/txtTitle"
    android:background="@color/Orange"
    />

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:paddingStart="15dp"
    android:background="@color/white"
    android:paddingEnd="15dp"
    android:paddingBottom="15dp"
    android:layout_weight="1">

    <TextView
        android:id="@+id/txtInfo"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignStart="@android:id/title"
        android:fontFamily="@font/roboto"
        android:maxLines="4"
        android:paddingTop="0dp"
        android:paddingBottom="10dp"
        android:text="Text"
        android:textColor="@color/paramvalue_textcolor"
        android:textSize="@dimen/config_paramvalue_size" />

    <EditText
        android:id="@+id/txtNumber"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/txtInfo"
        android:ems="5"
        android:inputType="number" />


    <Button
        android:id="@+id/btnOk"
        android:layout_width="98dp"
        android:layout_height="wrap_content"
        android:layout_alignWithParentIfMissing="false"
        android:layout_below="@+id/txtInfo"
        android:layout_centerHorizontal="false"
        android:layout_centerVertical="false"
        android:layout_marginStart="55dp"
        android:layout_marginTop="0dp"
        android:layout_toEndOf="@+id/txtNumber"
        android:paddingStart="15dp"
        android:paddingEnd="15dp"
        android:text="Ok" />

    <TextView
        android:id="@+id/txtError"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignStart="@android:id/title"
        android:layout_below="@id/txtNumber"
        android:layout_centerHorizontal="true"
        android:paddingTop="0dp"
        android:gravity="center_horizontal"
        android:maxLines="4"
        android:text="Error"
        android:visibility="gone"
        android:textColor="@color/error_color"
        android:textSize="@dimen/config_paramvalue_size"
        />

    <TextView
        android:id="@+id/txtInfoDefault"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignStart="@android:id/title"
        android:layout_below="@id/txtNumber"
        android:layout_centerHorizontal="true"
        android:paddingTop="0dp"
        android:gravity="center_horizontal"
        android:maxLines="4"
        android:text="Default"
        android:textColor="@color/c03_DarkGrey"
        android:visibility="gone"
        android:textSize="@dimen/config_paramvalue_size"
        />

</RelativeLayout>
ExpandableListAdapter.java
    public class ExpandableListAdapter extends BaseExpandableListAdapter {

private Context _context;
private List<String> _listDataHeader; // header titles
// child data in format of header title, child title
private HashMap<String, List<String>> _listDataChild;

public ExpandableListAdapter(Context context, List<String> listDataHeader,
                             HashMap<String, List<String>> listChildData) {
    this._context = context;
    this._listDataHeader = listDataHeader;
    this._listDataChild = listChildData;
}

@Override
public Object getChild(int groupPosition, int childPosititon) {
    return this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .get(childPosititon);
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return childPosition;
}

@Override
public View getChildView(int groupPosition, final int childPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {

    final String childText = (String) getChild(groupPosition, childPosition);


    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_item, null);
    }

    TextView txtListChild = (TextView) convertView.findViewById(R.id.lblListItem);
    txtListChild.setText(childText);

    Button button = convertView.findViewById(R.id.button1);
    button.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View view) {
            PopupDialog popup_dialog = new PopupDialog(_context);
            popup_dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
            popup_dialog.setContentView(R.layout.popup);
            Window help_window = popup_dialog.getWindow();
            help_window.setLayout(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT);
            popup_dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            popup_dialog.show();
            popup_dialog.setCanceledOnTouchOutside(true);

        }

    });
    return convertView;
}

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
                         View convertView, ViewGroup parent) {
    String headerTitle = (String) getGroup(groupPosition);
    if (convertView == null) {
        LayoutInflater infalInflater = (LayoutInflater) this._context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = infalInflater.inflate(R.layout.list_group, null);
    }

    TextView lblListHeader = (TextView) convertView
            .findViewById(R.id.lblListHeader);
    lblListHeader.setTypeface(null);
    lblListHeader.setText(headerTitle);

    return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
    return    this._listDataChild.get(this._listDataHeader.get(groupPosition))
            .size();
}

@Override
public Object getGroup(int groupPosition) {
    return this._listDataHeader.get(groupPosition);
}

@Override
public int getGroupCount() {
    return this._listDataHeader.size();
}

@Override
public long getGroupId(int groupPosition) {
    return groupPosition;
}

@Override
public boolean hasStableIds() {
    return false;
}

@Override
public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
}

}

标签: javaandroidxml

解决方案


PopupDialog类的构造函数中,您可以为标题添加一个附加参数。

private Context context;
private String title;

public PopupDialog(@NonNull Context context, String title) {
    super(context, R.style.NoActionBarDialog);
    this.context = context;

    // Call setTitle function of the Dialog class to set the title
    this.setTitle(title);
}

PopupDialog接下来,在您的内部创建一个新的时ExpandableListAdapter.java,请执行此操作。

PopupDialog popup_dialog = new PopupDialog(_context, "Some title");

现在,当您调用show您提供的标题时,应该是可见的。


推荐阅读