簡體   English   中英

Android:如何更改Fragment中從MainActivity接收數據的視圖

[英]Android: How to change view in Fragment that receive data from MainActivity

我正在開發從藍牙設備接收數據以在viewpager中分段的應用程序。 我的應用程序正在處理

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

  2. MainActivity的靜態String值已更改為來自藍牙設備的數據

  3. MainActivity中viewpager中片段的進度條將數據刷新為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(); } } } } } 

但是......當我啟動該應用程序時,視圖被凍結了...我不知道為什么我的應用程序被凍結了

您可以創建一個與片段進行通信的接口,例如:

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)

並傳遞新數據。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM