[英]Android: How to change view in Fragment that receive data from MainActivity
我正在開發從藍牙設備接收數據以在viewpager中分段的應用程序。 我的應用程序正在處理
MainActivity從藍牙設備接收數據
MainActivity的靜態String值已更改為來自藍牙設備的數據
MainActivity中viewpager中片段的進度條將數據刷新為MainActivity的數據(更改后的整數)
片段的進度條刷新數據並在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.