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();
}
}
});
}
}
bạn có thể đặt phương thức loadRows của mình không? có lẽ nguyên nhân đó. – savepopulation
không phải là vấn đề – Pangu
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 –