我面临着一个奇怪的问题,我不确定是什么导致了它.基本上,我使用ErrorFragment类来显示错误,简单吧?
问题与使用setButtonClickListener设置按钮单击侦听器有关.最初加载MainFragment时,该按钮不会记录我的Android TV遥控器的任何点击.
但是,如果我使用遥控器上的后退按钮重新加载MainFragment,则该按钮会记录点击次数.
谁能给我一些关于为什么会发生这种情况的见解?
谢谢!
MainActivity.java:
- public class MainActivity extends Activity
- {
- protected void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- }
- }
activity_main.xml中:
- <fragment
- xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:tools="http://schemas.android.com/tools"
- android:id="@+id/main_browse_fragment"
- android:name="com.ui.MainFragment"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.ui.MainActivity"
- tools:deviceIds="tv"
- tools:ignore="MergeRootFrame" />
MainFragment.java:
- public class MainFragment extends DetailsFragment
- {
- @Override
- public void onActivityCreated(Bundle savedInstanceState)
- {
- super.onActivityCreated(savedInstanceState);
- setupUIElements();
- if (isConnectingToInternet() == true)
- {
- prepareBackgroundManager();
- loadRows();
- setupEventListeners();
- }
- else
- {
- InternetConnectivityFragment internetError = new InternetConnectivityFragment();
- getFragmentManager().beginTransaction().add(R.id.main_browse_fragment,internetError).commit();
- }
- }
- public class GetInternetStatus extends AsyncTask<Void,Void,Boolean>
- {
- @Override
- protected Boolean doInBackground(Void... params)
- {
- return hasInternetAccess();
- }
- protected boolean hasInternetAccess()
- {
- try
- {
- URL url = new URL("http://www.google.com");
- HttpURLConnection urlc = (HttpURLConnection) url.openConnection();
- urlc.setRequestProperty("User-Agent","Android Application:1");
- urlc.setRequestProperty("Connection","close");
- urlc.setConnectTimeout(1000 * 30);
- urlc.connect();
- // http://www.w3.org/Protocols/HTTP/HTRESP.html
- if (urlc.getResponseCode() == 200 || urlc.getResponseCode() > 400)
- {
- // Requested site is available
- return true;
- }
- }
- catch (Exception ex)
- {
- // Error while trying to connect
- ex.printStackTrace();
- return false;
- }
- return false;
- }
- }
- // Checking for all possible internet connections
- public boolean isConnectingToInternet()
- {
- Boolean result = false;
- try
- {
- //get the result after executing AsyncTask
- result = new GetInternetStatus().execute().get();
- }
- catch (InterruptedException e)
- {
- e.printStackTrace();
- }
- catch (ExecutionException e)
- {
- e.printStackTrace();
- }
- return result;
- }
- ....
- }
InternetConnectivityFragment.java:
- public class InternetConnectivityFragment extends android.support.v17.leanback.app.ErrorFragment
- {
- private static int TIMER_DELAY = 3000;
- private static final String TAG = "InternetFragment";
- private static final boolean TRANSLUCENT = true;
- @Override
- public void onCreate(Bundle savedInstanceState)
- {
- super.onCreate(savedInstanceState);
- setErrorContent();
- }
- private void setErrorContent()
- {
- setImageDrawable(getResources().getDrawable(R.drawable.lb_ic_sad_cloud,null));
- setMessage(getResources().getString(R.string.no_internet_message));
- setDefaultBackground(TRANSLUCENT);
- setButtonText(getResources().getString(R.string.retry_connection));
- setButtonClickListener(new View.OnClickListener()
- {
- @Override
- public void onClick(View arg0)
- {
- MainFragment mainFragment = new MainFragment();
- if (mainFragment.isOnline() == true)
- {
- getFragmentManager().beginTransaction().remove(InternetConnectivityFragment.this).commit();
- getFragmentManager().popBackStack();
- }
- }
- });
- }
- }
解决方法
你有Android API来检查网络连接.检查这个是否为
Network Connectivity
不建议在方法isOnline()中访问Process.至少在主线程中.点击监听器中的mainFragment.isOnline()可能是原因.试着评论一下.