自定义一个mydialog
在Main中调用 
mydialog dialog=new mydialog(Main.this);  
                dialog.show();   
在mydialog中有个edittext
请问如何在Main中取得这个edittext里面的值。。忘高手指导~而且这个mydialog 是继承的 dialog类。而没有使用alertdialog。请问要如何做才能实现?

解决方案 »

  1.   

    你这个dialog里的edittext是在自定义的mydialog中加载的?
    要是那还不容易,自己写个接口来获取mydialog里edittext的内容。
      

  2.   

    是在dialog里面加载的。如何写接口取得?
      

  3.   

    关闭时保存到一个变量中,Main中取得这个变量就可以了。
      

  4.   

    是在mydialog里加载的。还不是在Main中~
      

  5.   

    mydialog类中肯定会有这个edittext的对象吧?
    有就自己做个接口获取不完了?
    private EditText edittext;
    public String getText(){
      return edittext.getText().toString();
    }
      

  6.   


    如何做?调用完后关闭dialog的时候。所有的变量不是全部都清空了吗?要怎么调用?
    我之前想把这个值放到R.string里面。不过最后没有实现。。请问应该怎么做?
      

  7.   

    这是写在Main里面的            public void onClick(View arg0) {  
                    Seekdialog dialog=new Seekdialog(Main.this);  
                    dialog.setTitle("色彩设置");
                    dialog.show();      
                    String tmp;
                    tmp=dialog.getText();
                    Log.d("test",tmp);而getText()写在Seekdialog里面。是这样写的
    public String getText(){
          return TrackingTextR.getText().toString();
        }
    最后点击完dialog的窗口关闭后,没有在log里面看到tmp的值。。请问要怎么做。。
      

  8.   

    Seekdialog dialog=new Seekdialog(Main.this); 作为main的成员变量吧,不要click中new。
    onCreate里去new,再试试。或者这样,你点击完dialog的窗口关闭后,给main用handler发个消息,然后main中去获取dialog里edit的内容。
      

  9.   

    我在onCreate里面new了。试了还是不行。点击关闭dialog的窗口后。如果给handler发消息?
      

  10.   

    楼主。。恩你还不如直接定义xml做dailog 直接找id多么的方便啊。。
      

  11.   

    private void showDialog_Layout() {
    LayoutInflater inflater = LayoutInflater.from(this);
    final View textEntryView = inflater.inflate(R.layout.night_item, null);
    final EditText edtInput = (EditText) textEntryView
    .findViewById(R.id.EditText01);
    final AlertDialog.Builder builder = new AlertDialog.Builder(Peipei.this);
    builder.setCancelable(false);
    builder.setIcon(R.drawable.icon);
    builder.setTitle("Title");
    builder.setView(textEntryView);
    builder.setPositiveButton("确认", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
    setTitle(edtInput.getText());
    }
    });
    builder.setNegativeButton("取消", new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int whichButton) {
    setTitle("");
    }
    });
    builder.show();
    }
      

  12.   

    在关闭dialog时取得edittext的值就可以了。
      

  13.   

    呀。我自定义的。里面没有AlertDialog.Builder 
    主要是自定义里面的dialog要实现seekbar。所以自定义了个dialog~
    就没办法用builder.setPositiveButton这个方法了~
      

  14.   

    在关闭dialog时取得edittext的值就可以了。
    就是在关闭的时候不知道怎么取~~
      

  15.   

    关闭时直接用我说的方法把edit内容取出来,然后发个handler消息,把取到的内容通过bundle给sendmessage给main
      

  16.   

    能写个简单的例子吗?没有java基础~
    谢谢了~
      

  17.   


    Bundle data = new Bundle();
    data.putString("edit",edit.getText().toString());
    Message msg = new Message();
    msg.what = 0;
    msg.setData(data);
    handler.sendMessage(msg);
    然后在main里的handler中handleMessage()处理id为0的消息:Bundle data = msg.getData();
    String edittext = data.getString("edit","");这个edittext就是edit的内容了。
      

  18.   

    在Main里
    Handler mHandler = new Handler(){        
            public void handleMessage(Message msg) {  
            switch (msg.what) {  
            case 0:  
             Log.d("test", "123");
             Bundle data = msg.getData();
             String edittext = data.getString("edit");
            break;  
            }  
             }
            };在dialog里面Bundle data = new Bundle();
    data.putString("edit",edit.getText().toString());
    Message msg = new Message();
    msg.what = 0;
    msg.setData(data);
    handler.sendMessage(msg);
    这样吗?
      

  19.   

    呀。最后那个不能加颜色呀。就是说在dialog里面handler要怎么整?怎么样设置成Main传过来的?
      

  20.   

    Android 的窗口是异步的,dialog.show() 的时候并不会阻塞主程序,而是继续执行主程序下面的代码,要像 peijiangping1989 那样写
      

  21.   

        
        public void buildDialog(){
         // 从资源创建视图
         LayoutInflater factory = LayoutInflater.from(this);
         View view = factory.inflate(R.layout.colorpeek, null); //自定义视图
        
         // 创建对话框
         AlertDialog.Builder builder = new AlertDialog.Builder(this);
         builder.setView(view);
         builder.setPositiveButton("OK", colorOKClickListener);
         AlertDialog dialog = builder.create();
         dialog.show();
        }    // OK按钮消息处理
        DialogInterface.OnClickListener  colorOKClickListener = new DialogInterface.OnClickListener(){
         public void onClick(DialogInterface dialog, int which){
         AlertDialog alertDialog = (AlertDialog)dialog;               //假设colorpeek.xml里面定义了文本框txtColor,现取出放到主界面txtInput里面
         txtInput.setText(((EditText)alertDialog.findViewById(R.id.txtColor)).getText().toString());
         }
        };
      

  22.   

    呀。我用的不是alertdialog的。。我已经自己定义了一个dialog。我把全部代码贴上来吧~public class Seekdialog extends Dialog {  
    SeekBar SeekBarR, SeekBarG,SeekBarB;
    TextView ProgressTextR,ProgressTextG,ProgressTextB;
    TextView ShowColor;
    EditText TrackingTextR;
    String Rvalue="00";
    String Bvalue="00";
    String Gvalue="00";
    int IntegerR=0;
    int IntegerG=0;
    int IntegerB=0;
    long colorRGB;
        private Context context;
    public MyDialogListener listener;   

        public Seekdialog(Context context){  
              
            super(context);  
              
            this.context = context;  
        }  
          
        public Seekdialog(Context context, int theme) {  
              
            super(context, theme);  
              
            this.context = context;  
        }  
        
        public Seekdialog(Context context, MyDialogListener listener) {
            super(context);
            this.listener = listener;
        }
        @Override  
        protected void onCreate(Bundle savedInstanceState) {  
            super.onCreate(savedInstanceState);  
              
            setContentView(R.layout.seekdialog);  
              
          //取得SeekBar对象
    SeekBarR = (SeekBar) findViewById(R.id.seekR);
    //SeekBarR.setOnSeekBarChangeListener(this);
    SeekBarR.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(
                SeekBar seekBar,
                int progress,
                boolean fromUser) {
         ProgressTextR.setText("R:" + progress);
    Rvalue=tmpgetcode(progress);
    IntegerR=progress;
    TrackingTextR.setText(Rvalue+Gvalue+Bvalue);
    //   Log.d(TAG,Integer.toString(Integer.parseInt("ff",16)));
    ShowColor.setBackgroundColor(Color.rgb(progress,IntegerG,IntegerB));
       
        }
     
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
         TrackingTextR.setText(Rvalue+Gvalue+Bvalue);
    ShowColor.setBackgroundColor(Color.rgb(IntegerR,IntegerG,IntegerB));
        }
     
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
         TrackingTextR.setText(Rvalue+Gvalue+Bvalue);
    ShowColor.setBackgroundColor(Color.rgb(IntegerR,IntegerG,IntegerB));
        }
    });

    SeekBarG = (SeekBar) findViewById(R.id.seekG);
    SeekBarG.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(
                SeekBar seekBar,
                int progress,
                boolean fromUser) {
         ProgressTextG.setText("G:" + progress);
    Gvalue=tmpgetcode(progress);
    IntegerG=progress;
    TrackingTextR.setText(Rvalue+Gvalue+Bvalue);
    //   Log.d(TAG,Integer.toString(Integer.parseInt("ff",16)));
    ShowColor.setBackgroundColor(Color.rgb(IntegerR,progress,IntegerB));
       
        }
     
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
         TrackingTextR.setText(Rvalue+Gvalue+Bvalue);
    ShowColor.setBackgroundColor(Color.rgb(IntegerR,IntegerG,IntegerB));
        }
     
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
         TrackingTextR.setText(Rvalue+Gvalue+Bvalue);
    ShowColor.setBackgroundColor(Color.rgb(IntegerR,IntegerG,IntegerB));
        }
    });
    SeekBarB = (SeekBar) findViewById(R.id.seekB);
    SeekBarB.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(
                SeekBar seekBar,
                int progress,
                boolean fromUser) {
         ProgressTextB.setText("B:" + progress);
    Bvalue=tmpgetcode(progress);
    Bvalue.length();
    IntegerB=progress;
    TrackingTextR.setText(Rvalue+Gvalue+Bvalue);
    //   Log.d(TAG,Integer.toString(Integer.parseInt("ff",16)));
    ShowColor.setBackgroundColor(Color.rgb(IntegerR,IntegerG,progress));
       
        }
     
        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {
         TrackingTextR.setText(Rvalue+Gvalue+Bvalue);
    ShowColor.setBackgroundColor(Color.rgb(IntegerR,IntegerG,IntegerB));
        }
     
        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
         TrackingTextR.setText(Rvalue+Gvalue+Bvalue);
    ShowColor.setBackgroundColor(Color.rgb(IntegerR,IntegerG,IntegerB));
        }
    });

    ShowColor=(TextView)findViewById(R.id.ShowColor);
    ProgressTextR = (TextView) findViewById(R.id.RView);
    ProgressTextG = (TextView) findViewById(R.id.GView);
    ProgressTextB = (TextView) findViewById(R.id.BView);
    TrackingTextR = (EditText) findViewById(R.id.RGBedit);

    Button Button01 = (Button)findViewById(R.id.button_yes);
    Button Button02 = (Button)findViewById(R.id.button_no);
    Button01.setOnClickListener(myOnClickListener);   
    Button01.setOnClickListener(myOnClickListener);   
       
        }  
      
      
          
        private View.OnClickListener myOnClickListener = new View.OnClickListener() {  
              
            public void onClick(View v) {  
                  
                try {  
                    switch(v.getId()){  
                    case R.id.button_yes:
       
                     dismiss();  
                     break;
                    case R.id.button_no:
                     cancel(); 
                     break;
                   
                    }  
                } catch (Exception e) {  
                      
                    e.printStackTrace();  
                }  
            }  
        };  
          
        private String tmpgetcode(int index){
         String tmp;
        
         tmp=Integer.toHexString(index);
         if(tmp.length()<2){
         tmp="0"+tmp;
         }
         return tmp;
        }
    }  
      

  23.   

    然后在Main里面调用的部分是  public void onClick(View arg0) {   
                 Seekdialog dialog=new Seekdialog(Main.this);         
                    dialog.show();      
                }        我想问就是怎么样得到Seekdialog里面的值在MAIN函数里面。。~
      

  24.   


    我测试过了,这个是好使的。 感谢jindaodaxia 。楼主,你也用这个试试。 我是自己定义一个xml,然后用alertbuilder 加载,然后取值 。
    这个的关键就是findViewById 要用factory.inflate得到的这个对象的才行。 
      

  25.   


    在你这个自定义的dialog中, 在oncreate中,给button加一个onclicklistener
    在处理函数onclicklistener中。 直接用 findViewById(R.id.editbox1)就能得到editbox的对象。EditText t1 = findViewById(R.id.editbox1);
    //aa 是调用这个对话框的view的一个静态变量。
    Main.aa= t1.getText();
      

  26.   

    public void onClick(View arg0) {   
                    Seekdialog dialog=new Seekdialog(Main.this);         
                    dialog.show();      
                }        
    呀?在Main里面怎么使用?这样写的话。好像点击关闭后。。回到主页面的时候。没有变化。。~
      

  27.   

    继承Dialog类,然后用 Dialog对象.show,这是VC或者C#里面的做法,他们的对话框是同步阻塞型的,show之后会一直阻塞到自定义Dialog的关闭。
    Android里面不是主要的,Dialog是异步的,show之后不会阻塞,不会等到你点了Dialog的关闭之后再继续运行,而是直接运行 show() 之后的代码,show之后取Dialog里面的东西都还是null。
    要实现你所说的在Dialog里面取颜色功能,有两种办法:
    1. 用AlertDialog, 在主程序Activity里面处理Dialog的各种动作消息2. 自定义Dialog类,重载Dialog的show(),在里面阻塞,直到按下OK或Cancel(应该可以通过wait,notify实现)。这样就类似VC对话框,show之后能立即取到选取的颜色3. 自定义Dialog类,在OK或Cancel消息处理时,往创建Dialog的Activity发消息
      

  28.   

    方法1已发代码方法2似乎很难实现方法3代码:
    1.  消息监听器类
    public interface MessageListener {
    public void onMessage(String message);
    }2. Activity    //弹出对话框
       Seekdialog dlg = new Seekdialog(Hello.this);
         dlg.setMessageListener(messgeListener);
         dlg.show();   // 文本消息监听器
        public MessageListener messgeListener = new MessageListener(){
         public void onMessage(String message){
         String color = message;
         Log.d("get Color message:", color);
         txtInput.setText(message);
         }
        };3. SeekDialog 
       public class Seekdialog extends Dialog {
    private MessageListener messageListener;

    public MessageListener getMessageListener() {
    return messageListener;
    } public void setMessageListener(MessageListener messageListener) {
    this.messageListener = messageListener;
    }
    ...... // OK按钮点击消息处理
    View.OnClickListener okClickListener = new android.view.View.OnClickListener(){
    public void onClick(View view){
                            // 假设有名为txtColor的文本框
    String color = txtColor.getText().toString();

    //通知Activity
    if(messageListener != null){
    messageListener.onMessage(color);
    }

    cancel();
    }
    }; 
       
      

  29.   

    都太装13了,都写两句有的没的,又不说明白怎么实现,到最后也不是楼主问的问题。楼主就是问Alertdialog里的值怎么传给调用它的Activity,直接说方法不就行了吗?都故作玄虚,好像很深奥,其实自己也说不出来吧。我的意见是,在点击确定,关闭Alertdialog时,发个消息出来,然后在Activity里写个handler处理发出来的消息。
      

  30.   

    或者,刚刚测试了一下,Activity定义一个static的成员变量,能直接把值取出来。