मुझे एक अजीब समस्या का सामना करना पड़ रहा है और मुझे यकीन नहीं है कि इसका क्या कारण है। असल में, मैं एक त्रुटि प्रदर्शित करने के लिए 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();
}
}
});
}
}
क्या आप अपनी लोडरो विधि डाल सकते हैं? शायद यही कारण है। – savepopulation
समस्या नहीं है – Pangu
FragmentManager का उपयोग करने के बजाय ChildFragmentManager का उपयोग करने का प्रयास करें। दरअसल यदि आप किसी अन्य टुकड़े के अंदर टुकड़े जोड़ना चाहते हैं तो आपको बाल खंड प्रबंधक –