简体   繁体   English

在自定义AlertDialog中编辑TextView

[英]Edit the TextView in custom AlertDialog

I have a layout with 10 buttons. 我有一个带有10个按钮的布局。 When I click one of them a custom dialog shows up, that has 2 textviews - one for the title and one for the quote. 当我单击其中一个时,将显示一个自定义对话框,其中有2个文本视图-一个用于标题,一个用于引用。

There's always an instant crash when I try to edit the TextView programmatically. 当我尝试以编程方式编辑TextView时,总是会立即崩溃。 The program crashes when I call tv1.setText . 当我调用tv1.setText时,程序崩溃。

I tried to create an another function called Qdialog . 我试图创建另一个名为Qdialog函数。 When I call it the program crashes as well. 当我调用它时,程序也会崩溃。

package com.example.lud.fortunecookie;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Menuslection extends AppCompatActivity {
 Button btback, bt1, bt2, bt3, bt4, bt5, bt6, bt7, bt8, bt9, bt10;
 TextView tv1,tv2;
 AlertDialog quotesalert;
 AlertDialog.Builder quitbuilder,quotesbuilder;
 int numb = 0;

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


    bt1 = (Button) findViewById(R.id.button1);
    bt2 = (Button) findViewById(R.id.button2);
    bt3 = (Button) findViewById(R.id.button3);
    bt4 = (Button) findViewById(R.id.button4);
    bt5 = (Button) findViewById(R.id.button5);
    bt6 = (Button) findViewById(R.id.button6);
    bt7 = (Button) findViewById(R.id.button7);
    bt8 = (Button) findViewById(R.id.button8);
    bt9 = (Button) findViewById(R.id.button9);
    bt10 = (Button) findViewById(R.id.button10);
    btback = (Button) findViewById(R.id.buttonback);
    btback.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            quitbuilder = new AlertDialog.Builder(Menuslection.this);
            quitbuilder.setMessage("Are you sure to quit ?");
            quitbuilder.setTitle("Are you already got my advise.");
            quitbuilder.setCancelable(false);
            quitbuilder.setNegativeButton("yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    //finish(); //dung de thoat khoi activity hien tai
                    Intent iquit = new Intent(getApplicationContext(), MainActivity.class);
                    startActivity(iquit);
                    Intent startMain = new Intent(Intent.ACTION_MAIN);
                    startMain.addCategory(Intent.CATEGORY_HOME);
                    startActivity(startMain);
                    finish();
                }
            });
            quitbuilder.setPositiveButton("no", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {

                }
            });
            AlertDialog Alertquit = quitbuilder.create();
            Alertquit.show();
        }
    });

    //View layout = inflater.inflate(R.layout.dialoglayouttest,null);
    //View layout = inflater.inflate(R.layout.customdialog, null);
   // quotesbuilder.setView(tv1);
  //  View content =  inflater.inflate(R.layout.dialoglayouttest, null);
   // quotesbuilder.setView(content);
    //TextView tv1 = (TextView) content.findViewById(R.id.dia_tit);

 bt1.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        numb=1;
        Qdialog();
        quotesalert.show();
    }
});
bt2.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        numbslection(2);
        quotesalert.show();
    }
});
bt3.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        numbslection(3);
        quotesalert.show();
    }
});
bt4.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        numbslection(4);
        quotesalert.show();
    }
});
bt5.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        numbslection(5);
        quotesalert.show();
    }
});
bt6.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        numbslection(6);
        quotesalert.show();
    }
});
bt7.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        numbslection(7);
        quotesalert.show();
    }
});
bt8.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        numbslection(8);
        quotesalert.show();
    }
});
bt9.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
        numbslection(9);
        quotesalert.show();
    }
});
bt10.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
       Qdialog();
     //   numb=10;
     //   quotesalert.show();

    }
});
}


public int numbslection(int numb)
{//Slection Tittle Classic setup
    if(numb==10)
        numb=1;
        //tv1.setText("");
    else
        if(numb==1||numb==2)
            tv1.setText(R.string.Pgud);
         else
          if(numb<7&&numb>2)
            tv1.setText(R.string.OK);
            else
            tv1.setText(R.string.Upset);

return numb;
}


public void Qdialog()
{

    quotesalert.setContentView(R.layout.dialoglayouttest);
    tv1 =(TextView) findViewById(R.id.dia_tit);
    numbslection(numb);
    quotesbuilder = new AlertDialog.Builder(Menuslection.this);
    quotesalert=quotesbuilder.create();
}
}

To use custom layout to AlertDialog, you have to inflate layout and set view to AlertDiaolog: 要将自定义布局用于AlertDialog,必须膨胀布局并将视图设置为AlertDiaolog:

 public void Qdialog()
 {
     LayoutInflater inflater = this.getLayoutInflater();
     View dialogView = inflater.inflate(R.layout.dialoglayouttest, null);
     quotesbuilder = new AlertDialog.Builder(Menuslection.this);
     quotesbuilder.setView(dialogView);   
     EditText editText = (EditText) dialogView.findViewById(R.id.dia_tit);
     quotesalert = quotesbuilder.create();
     quotesalert.show();
 }

ALTERNATIVE: 替代方案:

 If you want to use custom layout, use **Dialog** instead of **AlertDialog** :

 public void Qdialog()
{
     Dialog dialog = new Dialog(this)
     dialog.setContentView(R.layout.dialoglayouttest);
     dialog.setTitle("Title...");
     TextView text = (TextView) dialog.findViewById(R.id.dia_tit);
     dialog.show();
}

Hope this helps. 希望这可以帮助。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM