2016-05-21 28 views
0

我正在開發從藍牙設備接收數據以便在viewpager中片段化的應用程序。 我的應用程序的過程中它Android:如何更改從MainActivity接收數據的片段中的視圖

  1. MainActivity從藍牙設備接收數據

  2. MainActivity的靜態字符串值改爲從藍牙設備中的數據

  3. 片段在viewpager進度在MainActivity刷新數據作爲MainActivity的數據(已更改的整數)

  4. 片段的進度條刷新數據並查看MainActivity的數據改變

    public class BalanceFragment extends Fragment{ 
    
    public static String data = "0"; 
    private String old = data; 
    
    private ProgressBar progressBar; 
    private TextView textView; 
    private Handler handler; 
    private MyThread myThread; 
    
    public BalanceFragment() { 
    
    } 
    
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
             Bundle savedInstanceState) { 
    
        return inflater.inflate(R.layout.fragment_balance, container, false); 
    } 
    
    @Override 
    public void onStop() { 
        try{ 
         myThread.stop(); 
        } catch (Exception e){ 
         e.printStackTrace(); 
        } 
    } 
    
    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
        super.onViewCreated(view, savedInstanceState); 
        progressBar = (ProgressBar) view.findViewById(R.id.progressBar); 
        textView = (TextView) view.findViewById(R.id.balanceProgressText); 
        myThread = new MyThread(); 
        myThread.run(); 
    } 
    
    @Override 
    public void onResume() { 
        myThread.run(); 
    } 
    
    class MyThread extends Thread{ 
        @Override 
        public void run() { 
         while(true) { 
          try { 
           this.sleep(5000); 
           MainActivity.println("test", "test"); 
          } catch (Exception e){ 
           e.printStackTrace(); 
          } 
          if (old != data){ 
           old = data; 
           progressBar.setProgress(Integer.valueOf(data)); 
           textView.setText(data); 
           progressBar.invalidate(); 
           textView.invalidate(); 
          } 
         } 
         } 
        } 
    } 
    

但是....當我啓動這個應用程序,查看被凍結...... 我不知道爲什麼我的應用程序被凍結

+0

您不應該從單獨的線程更新視圖,這可能是錯誤行爲的原因。 – Egor

回答

0

你可以創建界面片段進行溝通,例如:

public class TestActivity extends Activity { 

    interface DataCallback { 

     void onData(String data); 

    } 

    DataCallback callback; 

    @Override 
    protected void onResume() { 
     super.onResume(savedInstanceState); 

     SampleFragment fragment = SampleFragment.newInstance(); 
     callback = fragment.getCallback(); 
     getFragmentManager().beginTransaction().replace(R.id.container, fragment, "tag").commit() 

    } 

    public static class SampleFragment extends Fragment implements DataCallback { 

     public static SampleFragment newInstance() { 

      Bundle args = new Bundle(); 

      SampleFragment fragment = new SampleFragment(); 
      fragment.setArguments(args); 
      return fragment; 
     } 

     public DataCallback getCallback() { 
      return this; 
     } 

     @Override 
     public void onData(String data) { 
      //Update UI with data 
     } 
    } 

} 
每一個你的活動接收到一個新的數據時

你應該叫:

callback.onData(variableValue) 

並傳遞新數據。

+0

我是否將它應用於我的案例,一個應用程序有5個片段類分隔MainActivity,1個customViewPagerAdapter,1個MainActivity ?? .....我必須將Fragment實現爲內部類嗎? – Hun

+0

如果您在更復雜的情況下使用案例,請使用[link](http://greenrobot.org/eventbus/)在您的活動中創建生產者界面,並在其他片段中創建所有使用者界面。在這裏例如[鏈接](http://www.andreas-schrade.de/2015/11/28/android-how-to-use-the-greenrobot-eventbus/) – mcatta

+0

哦,我的上帝!你是我的救星!!! XD謝謝。 – Hun

相關問題