2013-06-22 3 views
3

В моем приложении у меня есть три кнопки, и когда одна кнопка нажата, она вызывает поток, чтобы начать что-то, что я хочу иметь возможность вводить строку edittext в потоки и выполнять некоторую работу с ней, а затем возвращать ее UI Thread, где я могу отображать его или помещать в opengl для отображения объекта. Я прочитал «Ручки», и я не уверен, что полностью понимаю их, и, может быть, если кто-нибудь знает способ сделать мой собственный код обработчика. Кроме того, я прочитал об Async, и я не думаю, что это принесло бы пользу моему приложению (личный оппонент, если это принесет пользу моему приложению, дайте мне знать). Мой вопрос заключается в том, как получить информацию из UI edittext, когда ввод будет нажат на строку thread в классе DrawingUtils, то работа над ним выполняется, а затем возвращается к пользовательскому интерфейсу, чтобы быть эйером, отображаемым или введенным в программу openGl?Как реализовать обработчик в другом классе?

Вот MainActivity класс:

public class MainActivity extends Activity implements OnClickListener { 
    EditText cl; 
    TextView info; 
    Button enter; 
    Button line; 
    Button arc; 
    Line callLine = new DrawingUtils.Line(); 
    Enter callEnter = new DrawingUtils.Enter(); 
    Arc callArc = new DrawingUtils.Arc(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     info = (TextView) findViewById(R.id.info); 
     enter = (Button) findViewById(R.id.enter); 
     line = (Button) findViewById(R.id.line); 
     arc = (Button) findViewById(R.id.arc); 

     Handler UIhandler = new Handler() { 
       @Override 
       public void handleMessage(Message msg) { 
        Bundle bundle = msg.getData(); 
        String string = bundle.getString("myKey"); 

       } 
      }; 

    } 

    @Override 
    public void onClick(View v) { 
     // TODO Auto-generated method stub 
     switch (v.getId()) { 
     case R.id.enter: 
      callEnter.start(); 
      break; 
     case R.id.line: 
      callLine.start(); 
      break; 
     case R.id.arc: 
      callArc.start(); 
      break; 
     } 

    }; 

} 

Вот DrawingUtils класс:

public class DrawingUtils { 
    MainActivity handle = new MainActivity(); 

    // Thread classes for buttons 
    public static class Enter extends Thread { 
     Thread enter = new Thread() { 
      public void run() { 

      } 

     }; 

     public static class Line extends Thread { 
      Thread line = new Thread() { 
       public void run() { 

       } 
      }; 

     } 

     public static class Arc extends Thread { 
      Thread arc = new Thread() { 
       public void run() { 

       } 
      }; 
     } 
    } 
} 

ответ

4
public class MyActivity extends Activity { 
    @Override 
    protected void onCreate(Bundle savedInstance) { 
     // .... 
     Handler myHandler = new Handler() { 
      @Override 
      public void handleMessage (Message msg) { 
       doCoolStuffWhenMessageReceived(); 
      } 
     } 
     MySecondClass secondClass = new MySecondClass(myHandler); 
     // .... 
    } 
} 


public class MySecondClass { 
    private handler; 
    public MySecondClass(Handler handler){ 
     this.handler = handler; 
    } 

    private void someMethodToCallActivity() { 
     handler.sendEmptyMessage(0); 
    } 

}