【问题标题】:EditText Value in AndroidAndroid中的EditText值
【发布时间】:2013-07-25 01:39:21
【问题描述】:

我有一个自定义对话框。其中一个editText id在那里,我正在通过editText读取输入,将输入放入一个字符串。此代码后跟一个线程(子)来处理一个 url。我想在提到的线程中使用这个字符串。但是在我输入editText之前线程被调用了。如何动态使用线程内用户输入中的相同文本?提前谢谢..

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;  









         }

}

【问题讨论】:

  • 发布您拥有的代码,以便我们更容易了解您拥有什么以及您的问题在哪里
  • 保留创建线程的引用,并在需要时通过设置器将值传递给它。正如 codeMagic 所说,如果您发布代码,我们会更容易提供帮助。
  • 使用帖子下方的“编辑”按钮在此处添加您的代码...更易于阅读
  • 是的,但是您可以编辑评论中的代码并将其放入您的问题中,并对其进行格式化,以便我们更容易阅读。另外,如果您需要显示图片,您可以发布链接,有人可以添加它
  • 是的。多谢,伙计。添加了代码。现在我真正想要的是当收到通过编辑文本的输入时,我想在下一个线程中使用它,为 getUserPic 方法输入。当代码运行时,似乎线程在两者之间运行,当我们为编辑文本输入输入时,使用提到的字符串的初始值。如何动态获取该值,以便线程使用用户键入它的时间的确切值!谢谢

标签: android multithreading android-edittext


【解决方案1】:

基本上你想要做的是从按钮点击事件中运行线程,这样它在你得到文本后运行。请参阅下面的修改后的代码。 发生在 String 上的事件按此顺序发生。 1.创建字符串 2.设置String等于编辑文本String 3.启动线程并使用字符串

        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(); 

【讨论】:

  • 非常感谢老兄...工作得真快!
【解决方案2】:

我不确定我是否理解,但这句话“我如何在线程内动态使用来自用户输入的相同文本?”听起来你想在你的 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
    }
}

但是,如果您在单击Button 时检查EditText 中的有效值并且只启动您的Thread,那么它应该会执行您想要的操作。如果这不起作用,请澄清您的问题并说明您从哪里开始 Thread 以及它是如何实现的

【讨论】:

  • 感谢您的快速响应。当我按照 ACR Development 的建议将该线程放入点击侦听器(对话框内)时,它起作用了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 1970-01-01
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多