में नहीं बुलाया गया है, मैं नए nested fragment एपीआई का उपयोग कर रहा हूं जिसमें एंड्रॉइड समर्थन पुस्तकालय में शामिल है।onActivityResult() को नए नेस्टेड खंड एपीआई
समस्या यह है कि मैं नेस्टेड टुकड़े के साथ सामना करना पड़ रहा हूँ कि, एक नेस्टेड टुकड़ा है (यानि, एक टुकड़ा है कि getChildFragmentManager()
द्वारा दिया FragmentManager
के माध्यम से एक और टुकड़ा करने के लिए जोड़ दिया गया है) कॉल startActivityForResult()
, नेस्टेड टुकड़ा के onActivityResult()
तरीका नहीं है अगर है बुलाया। हालांकि, दोनों माता-पिता खंड onActivityResult()
और गतिविधि के onActivityResult()
दोनों कॉल किए जाते हैं।
मुझे नहीं पता कि मुझे घोंसले के टुकड़ों के बारे में कुछ याद आ रहा है, लेकिन मुझे वर्णित व्यवहार की उम्मीद नहीं थी। नीचे वह कोड है जो इस समस्या को पुन: उत्पन्न करता है। मैं बहुत ज्यादा अगर किसी ने मुझे सही दिशा में बात कर सकते हैं की सराहना करते हैं और मुझे समझा मैं गलत क्या कर रहा हूँ:
package com.example.nestedfragmentactivityresult;
import android.media.RingtoneManager;
import android.os.Bundle;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.Toast;
public class MainActivity extends FragmentActivity
{
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
this.getSupportFragmentManager()
.beginTransaction()
.add(android.R.id.content, new ContainerFragment())
.commit();
}
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
// This is called
Toast.makeText(getApplication(),
"Consumed by activity",
Toast.LENGTH_SHORT).show();
}
public static class ContainerFragment extends Fragment
{
public final View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState)
{
View result = inflater.inflate(R.layout.test_nested_fragment_container,
container,
false);
return result;
}
public void onActivityCreated(Bundle savedInstanceState)
{
super.onActivityCreated(savedInstanceState);
getChildFragmentManager().beginTransaction()
.add(R.id.content, new NestedFragment())
.commit();
}
public void onActivityResult(int requestCode,
int resultCode,
Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
// This is called
Toast.makeText(getActivity(),
"Consumed by parent fragment",
Toast.LENGTH_SHORT).show();
}
}
public static class NestedFragment extends Fragment
{
public final View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState)
{
Button button = new Button(getActivity());
button.setText("Click me!");
button.setOnClickListener(new View.OnClickListener()
{
public void onClick(View v)
{
Intent intent = new Intent(RingtoneManager.ACTION_RINGTONE_PICKER);
startActivityForResult(intent, 0);
}
});
return button;
}
public void onActivityResult(int requestCode,
int resultCode,
Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
// This is NOT called
Toast.makeText(getActivity(),
"Consumed by nested fragment",
Toast.LENGTH_SHORT).show();
}
}
}
test_nested_fragment_container.xml है:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/content"
android:layout_width="match_parent"
android:layout_height="match_parent" >
</FrameLayout>
एक सप्ताह पहले एक ही बग मिला। नेस्टेड फ्रैगमेंट पर मैन्युअल रूप सेActivityResult() पर कॉल करना पड़ा। व्यक्तिगत रूप से, मुझे लगता है कि यह एक बग है। वास्तव में यह देखने के लिए जांच नहीं की गई है कि यह ढांचे से करने योग्य है, लेकिन मुझे लगता है कि यह हो सकता है। उन्हें केवल शीर्ष स्तर के टुकड़े के लिए सभी बच्चे के टुकड़ों की जांच करने की आवश्यकता है और उनमें से प्रत्येक पर सक्रियताResult() पर कॉल करें। अगर ढांचे के भीतर से ऐसा करने का कोई तरीका नहीं है, तो ठीक है, यही वह है। लेकिन अगर ऐसा है, तो मैं गंभीरता से यह एक बग मानता हूं। –