Android中的EditText值

时间:2013-07-24 17:15:50

标签: android multithreading android-edittext

我有一个自定义对话框。其中有一个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;  









         }

}

2 个答案:

答案 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的位置及其实施方式