微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

我面临着一个奇怪的问题,我不确定是什么导致了它.基本上,我使用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()可能是原因.试着评论一下.

原文地址:https://www.jb51.cc/android/130108.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐