如何使用Java类中的LayoutInflater从XML文件中获取视图,而不是扩展活动



我有一个Java类,在其中我使用XML布局文件显示对话框。我想动态设置布局的文本/内容。

为了实现这一目标,我正在写一种这样的方法:

private void setContentMessage(String theMessage)
{
    View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_content, null, false);
    TextView titleMessage = (TextView) contentView.findViewById(R.id.title_message);
    titleMessage.setText(theMessage);
}

所以在这里,在膨胀方法中,我正在使用null,因为我不知道该使用什么。

通常,我们将ViewGroup对象用作膨胀方法中的第二个参数,但我不知道如何在Java类内创建一个不扩展活动的ViewGroup。

我上面写的功能是在对话框布局内不更改。因此,请告诉我如何在Java类中夸大布局。

amitsmartdialog.java

package com.amitupadhyay.touchme.utility;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import android.widget.Toast;
import com.amitupadhyay.touchme.R;
import com.orhanobut.dialogplus.DialogPlus;
import com.orhanobut.dialogplus.Holder;
import com.orhanobut.dialogplus.OnCancelListener;
import com.orhanobut.dialogplus.OnClickListener;
import com.orhanobut.dialogplus.OnDismissListener;
import com.orhanobut.dialogplus.OnItemClickListener;
import com.orhanobut.dialogplus.ViewHolder;
/**
 * Created by aupadhyay on 12/9/16.
 */
public class AmitSmartDialog {
    Context context;
    public AmitSmartDialog(Context context) {
        this.context = context;
    }
    public void showDialog(int holderId, int gravity, boolean showHeader, boolean showFooter, boolean expanded, String message) {
        setContentMessage(message);
        Holder holder;
        holder = new ViewHolder(R.layout.dialog_content);
        OnClickListener clickListener = new OnClickListener() {
            @Override
            public void onClick(DialogPlus dialog, View view) {
                switch (view.getId()) {
                    case R.id.like_it_button:
                        Toast.makeText(context, "We're glad that you like it", Toast.LENGTH_LONG).show();
                        break;
                    case R.id.love_it_button:
                        Toast.makeText(context, "We're glad that you love it", Toast.LENGTH_LONG).show();
                        break;
                }
                dialog.dismiss();
            }
        };
        OnItemClickListener itemClickListener = new OnItemClickListener() {
            @Override
            public void onItemClick(DialogPlus dialog, Object item, View view, int position) {
            }
        };
        OnDismissListener dismissListener = new OnDismissListener() {
            @Override
            public void onDismiss(DialogPlus dialog) {
            }
        };
        OnCancelListener cancelListener = new OnCancelListener() {
            @Override
            public void onCancel(DialogPlus dialog) {
            }
        };
        showCompleteDialog(holder, gravity, new BaseAdapter() {
                    @Override
                    public int getCount() {
                        return 0;
                    }
                    @Override
                    public Object getItem(int i) {
                        return null;
                    }
                    @Override
                    public long getItemId(int i) {
                        return 0;
                    }
                    @Override
                    public View getView(int i, View view, ViewGroup viewGroup) {
                        return null;
                    }
                }, clickListener, itemClickListener, dismissListener, cancelListener,
                expanded);
    }
    private void showCompleteDialog(Holder holder, int gravity, BaseAdapter adapter,
                                    OnClickListener clickListener, OnItemClickListener itemClickListener,
                                    OnDismissListener dismissListener, OnCancelListener cancelListener,
                                    boolean expanded) {
        final DialogPlus dialog = DialogPlus.newDialog(context)
                .setContentHolder(holder)
                .setHeader(R.layout.dialog_header)
                .setCancelable(false)
                .setGravity(gravity)
                .setAdapter(adapter)
                .setOnClickListener(clickListener)
                .setOnItemClickListener(new OnItemClickListener() {
                    @Override public void onItemClick(DialogPlus dialog, Object item, View view, int position) {
                    }
                })
                .setOnDismissListener(dismissListener)
                .setExpanded(expanded)
                .setContentHeight(ViewGroup.LayoutParams.WRAP_CONTENT)
                .setOnCancelListener(cancelListener)
                .setOverlayBackgroundResource(android.R.color.transparent)
                .create();
        dialog.show();
    }

    private void setContentMessage(String theMessage)
    {
        Toast.makeText(context, "HI BRO", Toast.LENGTH_SHORT).show();
        View contentView = LayoutInflater.from(context).inflate(R.layout.dialog_content, null, false);
        TextView titleMessage = (TextView) contentView.findViewById(R.id.title_message);
        titleMessage.setText(theMessage);
    }
}

使用这种方式:

LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View contentView = inflater.inflate(R.layout.dialog_content, null,false);

LayoutInflater inflater = LayoutInflater.from(getApplicationContext);
View contentView = inflater.inflate(R.layout.dialog_content, null,false);

更新:

做一些更改的方式

setContentMessage(message);通过 context作为参数。

所以像这样更改

setContentMessage(message, context);

也更改此。

private void setContentMessage(String theMessage,Context context)
    {
        View contentView = contxet.getLayoutInflater().inflate(R.layout.dialog_content, null);
        TextView titleMessage = (TextView) contentView.findViewById(R.id.title_message);
        titleMessage.setText(theMessage);
    }

在该方法的参数中通过上下文,然后使用此"(layoutinflater) mactivity.getSystemService(activity.layout_inflater_service);"

private void setContentMessage(String theMessage, Activity mActivity)
{
LayoutInflater mInflater = (LayoutInflater)
                mActivity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
    View contentView = mInflater.inflate(R.layout.dialog_content, null, false);
    TextView titleMessage = (TextView) contentView.findViewById(R.id.title_message);
    titleMessage.setText(theMessage);
}

从我的代码中我了解的内容,您正在使用自定义视图创建对话框,然后您想将消息设置为该对话框中的某些文本视图。

我看到您也使用持有人,因此,您可以像多余的那样调用setContentMessage(消息),而是可以像这样的东西

Holder holder;
holder = new ViewHolder(R.layout.dialog_content);
holder.titleMessage = message

在持有人实施中,您应该有一个指向标题文本视图的字段(这就是持有人模式的方式)。

最新更新