Java 将文本设置为自定义对话框类

Java 将文本设置为自定义对话框类,java,android,Java,Android,我试图建立一个自定义对话框,动态设置文本。下面是我的代码,它抛出了一个NullPointerException更新代码 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

我试图建立一个自定义对话框,动态设置文本。下面是我的代码,它抛出了一个
NullPointerException
更新代码

  listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            HomeItem homeItem = (HomeItem) adapter.getItem(position);
            final Dialog dialog = new Dialog(databaseFightCard.this, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
            WindowManager.LayoutParams lp = (dialog.getWindow().getAttributes());
            lp.dimAmount = 0.5f;
            dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

            Window window = dialog.getWindow();
            window.setGravity(Gravity.CENTER);

            dialog.setContentView(R.layout.custom_dialog);

            LayoutInflater inflater = (LayoutInflater) databaseFightCard.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
           RelativeLayout relative = (RelativeLayout) inflater.inflate(R.layout.custom_dialog, null, false);

            Button play = (Button) findViewById(R.id.bPlay);
            Button done = (Button) findViewById(R.id.bDone);
            TextView rn = (TextView) findViewById(R.id.tvRName);
            TextView ra = (TextView) findViewById(R.id.tvRAge);
            TextView rr = (TextView) findViewById(R.id.tvRRecord);
            TextView rh = (TextView) findViewById(R.id.tvRHeight);
            TextView rw = (TextView) findViewById(R.id.tvRWeight);
            TextView rc = (TextView) findViewById(R.id.tvRCity);
            TextView re = (TextView) findViewById(R.id.tvRExp);
            TextView bn = (TextView) findViewById(R.id.tvBName);
            TextView ba = (TextView) findViewById(R.id.tvBAge);
            TextView br = (TextView) findViewById(R.id.tvBRecord);
            TextView bh = (TextView) findViewById(R.id.tvBHeight);
            TextView bw = (TextView) findViewById(R.id.tvBWeight);
            TextView bc = (TextView) findViewById(R.id.tvBCity);
            TextView be = (TextView) findViewById(R.id.tvBExp);


            rn.setText(homeItem.getHomeItemRedName()+"");
            ra.setText(homeItem.getHomeItemRedAge()+"");
            rr.setText(homeItem.getHomeItemRedRecord()+"");
            rh.setText(homeItem.getHomeItemRedHeight()+"");
            rw.setText(homeItem.getHomeItemRedWeight()+"");
            rc.setText(homeItem.getHomeItemRedCity()+"");
            re.setText(homeItem.getHomeItemRedExp()+"");
            bn.setText(homeItem.getHomeItemBlueName()+"");
            ba.setText(homeItem.getHomeItemBlueAge()+"");
            br.setText(homeItem.getHomeItemBlueRecord()+"");
            bh.setText(homeItem.getHomeItemBlueHeight()+"");
            bw.setText(homeItem.getHomeItemBlueWeight()+"");
            bc.setText(homeItem.getHomeItemBlueCity()+"");
            be.setText(homeItem.getHomeItemBlueExp()+"");
            dialog.setContentView(relative);

            play.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //add the play intent here
                    dialog.dismiss();
                }
            });

            done.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    dialog.dismiss();
                }
            });
                dialog.show();

        }
    });

请解释如何将文本设置为对话框。

在尝试查找文本视图之前,请先尝试显示对话框,如put Dialog.show。或者先将视图充气,然后将视图传递给对话框。你现在要做的是在它膨胀之前找到它

编辑:要使用充气机,请尝试以下操作:

   LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

   RelativeLayout view = (RelativeLayout)inflater.inflate(R.layout.custom_dialog, null, false);

   TextView rn = (TextView) view.findViewById(R.id.tvRName);

   dialog.setContentView(view);
编辑2:

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        HomeItem homeItem = (HomeItem) adapter.getItem(position);
        final Dialog dialog = new Dialog(databaseFightCard.this, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
        WindowManager.LayoutParams lp = (dialog.getWindow().getAttributes());
        lp.dimAmount = 0.5f;
        dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

        Window window = dialog.getWindow();
        window.setGravity(Gravity.CENTER);

        LayoutInflater inflater = (LayoutInflater) databaseFightCard.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       RelativeLayout relative = (RelativeLayout) inflater.inflate(R.layout.custom_dialog, null, false);

        dialog.setContentView(relative);

        Button play = (Button) relative.findViewById(R.id.bPlay);
        Button done = (Button) relative.findViewById(R.id.bDone);
        TextView rn = (TextView) relative.findViewById(R.id.tvRName);
        TextView ra = (TextView) relative.findViewById(R.id.tvRAge);
        TextView rr = (TextView) relative.findViewById(R.id.tvRRecord);
        TextView rh = (TextView) relative.findViewById(R.id.tvRHeight);
        TextView rw = (TextView) relative.findViewById(R.id.tvRWeight);
        TextView rc = (TextView) relative.findViewById(R.id.tvRCity);
        TextView re = (TextView) relative.findViewById(R.id.tvRExp);
        TextView bn = (TextView) relative.findViewById(R.id.tvBName);
        TextView ba = (TextView) relative.findViewById(R.id.tvBAge);
        TextView br = (TextView) relative.findViewById(R.id.tvBRecord);
        TextView bh = (TextView) relative.findViewById(R.id.tvBHeight);
        TextView bw = (TextView) relative.findViewById(R.id.tvBWeight);
        TextView bc = (TextView) relative.findViewById(R.id.tvBCity);
        TextView be = (TextView) relative.findViewById(R.id.tvBExp);


        rn.setText(homeItem.getHomeItemRedName()+"");
        ra.setText(homeItem.getHomeItemRedAge()+"");
        rr.setText(homeItem.getHomeItemRedRecord()+"");
        rh.setText(homeItem.getHomeItemRedHeight()+"");
        rw.setText(homeItem.getHomeItemRedWeight()+"");
        rc.setText(homeItem.getHomeItemRedCity()+"");
        re.setText(homeItem.getHomeItemRedExp()+"");
        bn.setText(homeItem.getHomeItemBlueName()+"");
        ba.setText(homeItem.getHomeItemBlueAge()+"");
        br.setText(homeItem.getHomeItemBlueRecord()+"");
        bh.setText(homeItem.getHomeItemBlueHeight()+"");
        bw.setText(homeItem.getHomeItemBlueWeight()+"");
        bc.setText(homeItem.getHomeItemBlueCity()+"");
        be.setText(homeItem.getHomeItemBlueExp()+"");
        dialog.setContentView(relative);

        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //add the play intent here
                dialog.dismiss();
            }
        });

        done.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });
            dialog.show();

    }
});
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
HomeItem HomeItem=(HomeItem)适配器.getItem(位置);
最终对话框=新建对话框(databaseFightCard.this,android.R.style.Theme\u Black\u NoTitleBar\u全屏);
WindowManager.LayoutParams lp=(dialog.getWindow().getAttributes());
lp.dimAmount=0.5f;
dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG\u DIM\u BEHIND);
Window=dialog.getWindow();
设置重力(重心);
LayoutFlater充气器=(LayoutFlater)数据库FightCard.this.getSystemService(Context.LAYOUT\u充气器\u服务);
RelativeLayout relative=(RelativeLayout)充气器。充气(R.layout.custom_对话框,null,false);
setContentView(相对);
按钮播放=(按钮)相对.findViewById(R.id.bPlay);
Button done=(Button)relative.findViewById(R.id.bDone);
TextView rn=(TextView)relative.findViewById(R.id.tvRName);
TextView ra=(TextView)relative.findviewbyd(R.id.tvRAge);
TextView rr=(TextView)relative.findViewById(R.id.tvRRecord);
TextView rh=(TextView)relative.findViewById(R.id.tvRHeight);
TextView rw=(TextView)relative.findviewbyd(R.id.tvRWeight);
TextView rc=(TextView)relative.findviewbyd(R.id.tvRCity);
TextView re=(TextView)relative.findviewbyd(R.id.tvrepp);
TextView bn=(TextView)relative.findviewbyd(R.id.tvBName);
TextView ba=(TextView)relative.findviewbyd(R.id.tvBAge);
TextView br=(TextView)relative.findviewbyd(R.id.tvBRecord);
TextView bh=(TextView)relative.findViewById(R.id.tvBHeight);
TextView bw=(TextView)relative.findViewById(R.id.tvBWeight);
TextView bc=(TextView)relative.findViewById(R.id.tvBCity);
TextView be=(TextView)relative.findviewbyd(R.id.tvBExp);
rn.setText(homeItem.getHomeItemRedName()+);
ra.setText(homeItem.getHomeItemRedAge()+);
rr.setText(homeItem.getHomeItemRedRecord()+);
右侧.setText(homeItem.getHomeItemRedHeight()+);
rw.setText(homeItem.getHomeItemRedWeight()+);
rc.setText(homeItem.getHomeItemRedCity()+);
re.setText(homeItem.getHomeItemRedExp()+);
bn.setText(homeItem.getHomeItemBlueName()+);
ba.setText(homeItem.getHomeItemBlueAge()+);
br.setText(homeItem.getHomeItemBlueRecord()+);
bh.setText(homeItem.getHomeItemBlueHeight()+);
setText(homeItem.getHomeItemBlueWeight()+);
bc.setText(homeItem.getHomeItemBlueCity()+);
be.setText(homeItem.getHomeItemBlueExp()+);
setContentView(相对);
play.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
//在这里添加游戏意图
dialog.dismise();
}
});
done.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
dialog.dismise();
}
});
dialog.show();
}
});

我已尝试将.show()放在第一位。我不知道怎么做你说的另一件事。什么时候是设置文本的最佳时间?在
dialog.setContentView(视图)之前或之后设置文本时无所谓,只要布局已膨胀。您的代码将产生以下错误:
java.lang.ClassCastException:android.widget.RelativeLayout无法转换为android.widget.FrameLayout
抱歉,我已更新编辑。我假设你的根布局是一个框架布局,但它是一个相对的布局。
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        HomeItem homeItem = (HomeItem) adapter.getItem(position);
        final Dialog dialog = new Dialog(databaseFightCard.this, android.R.style.Theme_Black_NoTitleBar_Fullscreen);
        WindowManager.LayoutParams lp = (dialog.getWindow().getAttributes());
        lp.dimAmount = 0.5f;
        dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND);

        Window window = dialog.getWindow();
        window.setGravity(Gravity.CENTER);

        LayoutInflater inflater = (LayoutInflater) databaseFightCard.this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
       RelativeLayout relative = (RelativeLayout) inflater.inflate(R.layout.custom_dialog, null, false);

        dialog.setContentView(relative);

        Button play = (Button) relative.findViewById(R.id.bPlay);
        Button done = (Button) relative.findViewById(R.id.bDone);
        TextView rn = (TextView) relative.findViewById(R.id.tvRName);
        TextView ra = (TextView) relative.findViewById(R.id.tvRAge);
        TextView rr = (TextView) relative.findViewById(R.id.tvRRecord);
        TextView rh = (TextView) relative.findViewById(R.id.tvRHeight);
        TextView rw = (TextView) relative.findViewById(R.id.tvRWeight);
        TextView rc = (TextView) relative.findViewById(R.id.tvRCity);
        TextView re = (TextView) relative.findViewById(R.id.tvRExp);
        TextView bn = (TextView) relative.findViewById(R.id.tvBName);
        TextView ba = (TextView) relative.findViewById(R.id.tvBAge);
        TextView br = (TextView) relative.findViewById(R.id.tvBRecord);
        TextView bh = (TextView) relative.findViewById(R.id.tvBHeight);
        TextView bw = (TextView) relative.findViewById(R.id.tvBWeight);
        TextView bc = (TextView) relative.findViewById(R.id.tvBCity);
        TextView be = (TextView) relative.findViewById(R.id.tvBExp);


        rn.setText(homeItem.getHomeItemRedName()+"");
        ra.setText(homeItem.getHomeItemRedAge()+"");
        rr.setText(homeItem.getHomeItemRedRecord()+"");
        rh.setText(homeItem.getHomeItemRedHeight()+"");
        rw.setText(homeItem.getHomeItemRedWeight()+"");
        rc.setText(homeItem.getHomeItemRedCity()+"");
        re.setText(homeItem.getHomeItemRedExp()+"");
        bn.setText(homeItem.getHomeItemBlueName()+"");
        ba.setText(homeItem.getHomeItemBlueAge()+"");
        br.setText(homeItem.getHomeItemBlueRecord()+"");
        bh.setText(homeItem.getHomeItemBlueHeight()+"");
        bw.setText(homeItem.getHomeItemBlueWeight()+"");
        bc.setText(homeItem.getHomeItemBlueCity()+"");
        be.setText(homeItem.getHomeItemBlueExp()+"");
        dialog.setContentView(relative);

        play.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //add the play intent here
                dialog.dismiss();
            }
        });

        done.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                dialog.dismiss();
            }
        });
            dialog.show();

    }
});