2016-06-22 8 views
7

मुझे एक अजीब समस्या का सामना करना पड़ रहा है और मुझे यकीन नहीं है कि इसका क्या कारण है। असल में, मैं एक त्रुटि प्रदर्शित करने के लिए ErrorFragment कक्षा का उपयोग कर रहा हूं, सरल?एंड्रॉइड: ऑनक्लिक लिस्टनर प्रारंभिक लोड पर उत्तरदायी नहीं है?

समस्या setButtonClickListener का उपयोग कर बटन क्लिक श्रोता सेट करने के साथ करना है। जब MainFragment प्रारंभ में लोड किया गया है, तो बटन मेरे एंड्रॉइड टीवी रिमोट के साथ किसी भी क्लिक को पंजीकृत नहीं करता है।

हालांकि, अगर मैं रिमोट पर बैक बटन का उपयोग कर 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(); 
       } 
      } 
     }); 
    } 

} 

enter image description here

+0

क्या आप अपनी लोडरो विधि डाल सकते हैं? शायद यही कारण है। – savepopulation

+0

समस्या नहीं है – Pangu

+0

FragmentManager का उपयोग करने के बजाय ChildFragmentManager का उपयोग करने का प्रयास करें। दरअसल यदि आप किसी अन्य टुकड़े के अंदर टुकड़े जोड़ना चाहते हैं तो आपको बाल खंड प्रबंधक –

उत्तर

5

आप नेटवर्क कनेक्टिविटी की जाँच करने के एंड्रॉयड एपीआई की है। Network Connectivity

पर विधि isOnline() में अनुशंसित नहीं है। कम से कम मुख्य धागे में। क्लिक श्रोता में mainFragment.isOnline() कारण हो सकता है। उस पर टिप्पणी करने का प्रयास करें।

+0

का उपयोग करना होगा कि इसका कोई प्रभाव नहीं है, मैं अभी भी बटन को अपने रिमोट के साथ क्लिक नहीं कर सकता ... मैंने एक स्क्रीनशॉट जोड़ा – Pangu

+0

इसे डीबग करने का प्रयास करें। जहां यह समय ले रहा है या खो गया है। –

संबंधित मुद्दे