我有一个自定义对话框。其中有一个editText id,我通过editText读取输入,将输入放入字符串。此代码后跟一个线程(sub)来处理一个url。我想在提到的线程中使用此字符串。但是在我输入editText之前调用了线程。如何从线程内的userinput动态使用相同的文本?提前谢谢..
public void onClick(查看v) {
switch (v.getId())
{
case R.id.i1:
MyDevice.getInstance().currentUserImageId=R.drawable.jerry1;
MyDevice.getInstance().userName="You";
MyDevice.getInstance().facebook=0;
this.finish();
break;
case R.id.i2:
MyDevice.getInstance().currentUserImageId=R.drawable.chaplin1;
MyDevice.getInstance().userName="You";
MyDevice.getInstance().facebook=0;
this.finish();
break;
case R.id.i3:
MyDevice.getInstance().currentUserImageId=R.drawable.budy;
MyDevice.getInstance().userName="You";
MyDevice.getInstance().facebook=0;
this.finish();
break;
case R.id.facebook:
final Dialog dialog = new Dialog(this);
dialog.setContentView(R.layout.usernamefbdialog);
dialog.setTitle("Enter Facebook Username");
Button dialogButton = (Button) dialog.findViewById(R.id.done);
// if button is clicked, close the custom dialog
dialogButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
EditText edit=(EditText)dialog.findViewById(R.id.username);
text=edit.getText().toString();
dialog.dismiss();
}
});
dialog.show();
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
try
{
MyDevice.getInstance().bitmap=getUserPic(text);
MyDevice.getInstance().facebook=1;
ImageView facebookImg=(ImageView) findViewById(R.id.facebookimg);
facebookImg.setImageBitmap(MyDevice.getInstance().bitmap);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
thread.start();
break;
}
}
答案 0 :(得分:1)
基本上你要做的是从按钮点击事件中运行线程,这样它就会在你获得文本后运行。请参阅下面的修改后的代码 发生在String上的事件按此顺序发生。 1.创建字符串 2.将String设置为等于编辑文本String 3.启动Thread并使用String
final String theStringYouWantToUseInTheThread = null;
Thread thread = new Thread(new Runnable()
{
@Override
public void run()
{
try
{
//use theStringYouWantToUseInTheThread here
MyDevice.getInstance().bitmap=getUserPic(text);
MyDevice.getInstance().facebook=1;
ImageView facebookImg=(ImageView) findViewById(R.id.facebookimg);
facebookImg.setImageBitmap(MyDevice.getInstance().bitmap);
}
catch (Exception e)
{
e.printStackTrace();
}
}
});
dialogButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v)
{
EditText edit=(EditText)dialog.findViewById(R.id.username);
theStringYouWantToUseInTheThread = edit.getText().toString();
thread.start();
dialog.dismiss();
}
});
dialog.show();
thread.start();
答案 1 :(得分:0)
我不确定我是否理解,但是这句话“如何动态使用来自线程内用户输入的相同文本?”听起来好像你想在EditText
上实现TextWatcher }
public class TempWatcher implements TextWatcher {
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
// you can update something here
}
}
但是,如果您在点击EditText
时检查Button
中的有效值,然后只启动Thread
,那么它应该按您的要求执行。如果这不起作用,请澄清您的问题,并显示您开始Thread
的位置及其实施方式