java – Android:OnClickListener在初始加载时没有响应?

前端之家收集整理的这篇文章主要介绍了java – Android:OnClickListener在初始加载时没有响应?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我面临着一个奇怪的问题,我不确定是什么导致了它.基本上,我使用ErrorFragment类来显示错误,简单吧?

问题与使用setButtonClickListener设置按钮单击侦听器有关.最初加载MainFragment时,该按钮不会记录我的Android TV遥控器的任何点击.

但是,如果我使用遥控器上的后退按钮重新加载MainFragment,则该按钮会记录点击次数.

谁能给我一些关于为什么会发生这种情况的见解?

谢谢!

MainActivity.java:

  1. public class MainActivity extends Activity
  2. {
  3. protected void onCreate(Bundle savedInstanceState)
  4. {
  5. super.onCreate(savedInstanceState);
  6. setContentView(R.layout.activity_main);
  7. }
  8. }

activity_main.xml中:

  1. <fragment
  2. xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:id="@+id/main_browse_fragment"
  5. android:name="com.ui.MainFragment"
  6. android:layout_width="match_parent"
  7. android:layout_height="match_parent"
  8. tools:context="com.ui.MainActivity"
  9. tools:deviceIds="tv"
  10. tools:ignore="MergeRootFrame" />

MainFragment.java:

  1. public class MainFragment extends DetailsFragment
  2. {
  3. @Override
  4. public void onActivityCreated(Bundle savedInstanceState)
  5. {
  6. super.onActivityCreated(savedInstanceState);
  7.  
  8. setupUIElements();
  9.  
  10. if (isConnectingToInternet() == true)
  11. {
  12. prepareBackgroundManager();
  13. loadRows();
  14. setupEventListeners();
  15. }
  16. else
  17. {
  18. InternetConnectivityFragment internetError = new InternetConnectivityFragment();
  19.  
  20. getFragmentManager().beginTransaction().add(R.id.main_browse_fragment,internetError).commit();
  21. }
  22. }
  23.  
  24. public class GetInternetStatus extends AsyncTask<Void,Void,Boolean>
  25. {
  26.  
  27. @Override
  28. protected Boolean doInBackground(Void... params)
  29. {
  30.  
  31. return hasInternetAccess();
  32. }
  33.  
  34. protected boolean hasInternetAccess()
  35. {
  36. try
  37. {
  38. URL url = new URL("http://www.google.com");
  39.  
  40. HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
  41. urlc.setRequestProperty("User-Agent","Android Application:1");
  42. urlc.setRequestProperty("Connection","close");
  43. urlc.setConnectTimeout(1000 * 30);
  44. urlc.connect();
  45.  
  46. // http://www.w3.org/Protocols/HTTP/HTRESP.html
  47. if (urlc.getResponseCode() == 200 || urlc.getResponseCode() > 400)
  48. {
  49. // Requested site is available
  50. return true;
  51. }
  52. }
  53. catch (Exception ex)
  54. {
  55. // Error while trying to connect
  56. ex.printStackTrace();
  57. return false;
  58. }
  59. return false;
  60. }
  61. }
  62.  
  63. // Checking for all possible internet connections
  64. public boolean isConnectingToInternet()
  65. {
  66. Boolean result = false;
  67.  
  68. try
  69. {
  70. //get the result after executing AsyncTask
  71. result = new GetInternetStatus().execute().get();
  72. }
  73. catch (InterruptedException e)
  74. {
  75. e.printStackTrace();
  76. }
  77. catch (ExecutionException e)
  78. {
  79. e.printStackTrace();
  80. }
  81. return result;
  82. }
  83.  
  84. ....
  85. }

InternetConnectivityFragment.java:

  1. public class InternetConnectivityFragment extends android.support.v17.leanback.app.ErrorFragment
  2. {
  3. private static int TIMER_DELAY = 3000;
  4. private static final String TAG = "InternetFragment";
  5. private static final boolean TRANSLUCENT = true;
  6.  
  7. @Override
  8. public void onCreate(Bundle savedInstanceState)
  9. {
  10. super.onCreate(savedInstanceState);
  11.  
  12. setErrorContent();
  13. }
  14.  
  15. private void setErrorContent()
  16. {
  17. setImageDrawable(getResources().getDrawable(R.drawable.lb_ic_sad_cloud,null));
  18. setMessage(getResources().getString(R.string.no_internet_message));
  19. setDefaultBackground(TRANSLUCENT);
  20.  
  21. setButtonText(getResources().getString(R.string.retry_connection));
  22.  
  23. setButtonClickListener(new View.OnClickListener()
  24. {
  25. @Override
  26. public void onClick(View arg0)
  27. {
  28. MainFragment mainFragment = new MainFragment();
  29.  
  30. if (mainFragment.isOnline() == true)
  31. {
  32. getFragmentManager().beginTransaction().remove(InternetConnectivityFragment.this).commit();
  33. getFragmentManager().popBackStack();
  34. }
  35. }
  36. });
  37. }
  38.  
  39. }

解决方法

你有Android API来检查网络连接.检查这个是否为 Network Connectivity

不建议在方法isOnline()中访问Process.至少在主线程中.点击监听器中的mainFragment.isOnline()可能是原因.试着评论一下.

猜你在找的Android相关文章