自定义一个mydialog
在Main中调用
mydialog dialog=new mydialog(Main.this);
dialog.show();
在mydialog中有个edittext
请问如何在Main中取得这个edittext里面的值。。忘高手指导~而且这个mydialog 是继承的 dialog类。而没有使用alertdialog。请问要如何做才能实现?
在Main中调用
mydialog dialog=new mydialog(Main.this);
dialog.show();
在mydialog中有个edittext
请问如何在Main中取得这个edittext里面的值。。忘高手指导~而且这个mydialog 是继承的 dialog类。而没有使用alertdialog。请问要如何做才能实现?
解决方案 »
- sqlserver连接问题
- android有没有相应的日志组件进行对log的处理,比如像log4j这样的组件。
- 如何通过其他控件去触发listview的itemonclick事件呢?
- Android系统移植问题求助
- java源码 实现网页更新
- 请教关于Android在windows7下安装的问题
- Android 开发环境下载地址 -- 百度网盘 adt-bundle android-studio sdk adt 下载
- Sqlite建表后表丢失的问题
- android textview 异步线程加载html 时候出现 图文重叠
- Android 视频录制MediaRecorder相关问题,怎么生成缩略图?
- Android文件操作疑问!恳请各位帮帮忙,谢谢!
- android 怎么模拟输入有一个按键
要是那还不容易,自己写个接口来获取mydialog里edittext的内容。
有就自己做个接口获取不完了?
private EditText edittext;
public String getText(){
return edittext.getText().toString();
}
如何做?调用完后关闭dialog的时候。所有的变量不是全部都清空了吗?要怎么调用?
我之前想把这个值放到R.string里面。不过最后没有实现。。请问应该怎么做?
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的值。。请问要怎么做。。
onCreate里去new,再试试。或者这样,你点击完dialog的窗口关闭后,给main用handler发个消息,然后main中去获取dialog里edit的内容。
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();
}
主要是自定义里面的dialog要实现seekbar。所以自定义了个dialog~
就没办法用builder.setPositiveButton这个方法了~
就是在关闭的时候不知道怎么取~~
谢谢了~
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的内容了。
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);
这样吗?
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());
}
};
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;
}
}
Seekdialog dialog=new Seekdialog(Main.this);
dialog.show();
} 我想问就是怎么样得到Seekdialog里面的值在MAIN函数里面。。~
我测试过了,这个是好使的。 感谢jindaodaxia 。楼主,你也用这个试试。 我是自己定义一个xml,然后用alertbuilder 加载,然后取值 。
这个的关键就是findViewById 要用factory.inflate得到的这个对象的才行。
在你这个自定义的dialog中, 在oncreate中,给button加一个onclicklistener
在处理函数onclicklistener中。 直接用 findViewById(R.id.editbox1)就能得到editbox的对象。EditText t1 = findViewById(R.id.editbox1);
//aa 是调用这个对话框的view的一个静态变量。
Main.aa= t1.getText();
Seekdialog dialog=new Seekdialog(Main.this);
dialog.show();
}
呀?在Main里面怎么使用?这样写的话。好像点击关闭后。。回到主页面的时候。没有变化。。~
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发消息
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();
}
};