2016-06-22 20 views
7

Tôi đang gặp phải sự cố lạ và tôi không chắc chắn nguyên nhân gây ra sự cố. Về cơ bản, tôi đang sử dụng lớp ErrorFragment để hiển thị lỗi, đơn giản phải không?Android: OnClickListener không phản hồi khi tải ban đầu?

Sự cố phải làm với việc đặt trình nghe nhấp chuột vào nút sử dụng setButtonClickListener. Khi MainFragment ban đầu được tải, nút này không đăng ký bất kỳ nhấp chuột nào với điều khiển từ xa của Android TV của tôi.

Tuy nhiên, nếu tôi tải lại MainFragment bằng nút quay lại trên điều khiển từ xa, thì nút sẽ đăng ký các lần nhấp.

Có ai có thể cho tôi một số thông tin chi tiết về lý do tại sao điều này có thể xảy ra không?

Cảm ơn!

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

bạn có thể đặt phương thức loadRows của mình không? có lẽ nguyên nhân đó. – savepopulation

+0

không phải là vấn đề – Pangu

+0

Thay vì sử dụng FragmentManager, hãy thử sử dụng ChildFragmentManager. Trên thực tế nếu bạn muốn thêm các mảnh bên trong một đoạn khác thì bạn phải sử dụng trình quản lý phân đoạn con –

Trả lời

5

Bạn có API Android để kiểm tra kết nối Mạng. Kiểm tra điều này cho Network Connectivity

Không được phép truy cập Process trong phương pháp isOnline(). Atleast trong chủ đề chính. mainFragment.isOnline() trong trình nghe nhấp chuột có thể là nguyên nhân. Hãy thử nhận xét điều đó.

+0

nhận xét rằng không có hiệu lực, tôi vẫn không thể đăng ký nút bấm bằng điều khiển từ xa ... Tôi đã thêm ảnh chụp màn hình – Pangu

+0

Thử gỡ lỗi giống nhau. Trường hợp mất thời gian hoặc gettiing mất. –

Các vấn đề liên quan