Java 无法调用子片段的onActivityResult

Java 无法调用子片段的onActivityResult,java,android,android-fragments,navigation-drawer,Java,Android,Android Fragments,Navigation Drawer,我已经使用sharelockfragment实现了抽屉。我试图从gallery中选取图像,但该函数是在ChildFragment(FragmentTab1.java)中实现的。调用startActivityForResult时,该方法被重定向到Drawer.java类的onActivityResult方法。在这之后,它被重定向到Fragment1.java(父片段),但是我无法访问子片段(FragmentTab1)onActivityResult。我什么都试过了,在stackoverflow里到

我已经使用sharelockfragment实现了抽屉。我试图从gallery中选取图像,但该函数是在ChildFragment(
FragmentTab1.java
)中实现的。调用
startActivityForResult
时,该方法被重定向到Drawer.java类的
onActivityResult
方法。在这之后,它被重定向到
Fragment1.java
(父片段),但是我无法访问子片段(
FragmentTab1
onActivityResult
。我什么都试过了,在stackoverflow里到处都找过了,但运气不好。提前谢谢

Drawer.java(主要活动)

片段tab1.java(子片段)

public class FragmentTab1扩展了SherlockFragment{
ArrayList adList;
私有静态最终整型拾取图像=1;
@SuppressLint(“新API”)
@TargetApi(构建版本代码姜饼)
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
Log.e(“onCreateView”、“entry1”);
视图根视图=充气机。充气(R.layout.fragmenttab1,容器,错误);
如果(android.os.Build.VERSION.SDK_INT>9){
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(策略);
}
postAd=(按钮)rootView.findviewbyd(R.id.bpostAd);
description=(EditText)rootView.findViewById(R.id.etdescription);
price=(EditText)rootView.findviewbyd(R.id.etPrice);
最终放射组adType=(放射组)rootView.findViewById(R.id.RadioGroup);
RadioButton buy=(RadioButton)rootView.findViewById(R.id.rbBuy);
RadioButton sell=(RadioButton)rootView.findViewById(R.id.rbSell);
浏览=(按钮)rootView.findviewbyd(R.id.bBrowse);
msgLength=(TextView)rootView.findviewbyd(R.id.tvLength);
lv=(ListView)rootView.findViewById(R.id.listView1);
SharedReferences mPrefs=getActivity().GetSharedReferences(“IDvalue”,0);
userid=mPrefs.getString(“userIdKey”,null);
adList=newarraylist();
新建LoadMyAds().execute();
setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//做点什么
});
browse.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图v){
//TODO自动生成的方法存根
试一试{
Intent Intent=new Intent();Intent.setType(“image/*”);
intent.setAction(intent.ACTION\u GET\u CONTENT);
startActivityForResult(意向,1);
}捕获(例外e){
Toast.makeText(getActivity().getApplicationContext(),“错误”,
Toast.LENGTH_LONG).show();
Log.e(e.getClass().getName(),e.getMessage(),e);
}
}
});
返回rootView;
}
@凌驾
ActivityResult上的公共void(int请求代码、int结果代码、意图数据){
//TODO自动生成的方法存根
super.onActivityResult(请求代码、结果代码、数据);
Log.e(“活动结果”、“图像”);
//这是我不能称之为的
//当我在单个活动中而不是在片段中使用该函数时,它工作得很好
开关(请求代码){
案例选取图像:
if(resultCode==Activity.RESULT\u确定){
Uri selectedImageUri=data.getData();
字符串filePath=null;
试一试{
//文件管理器
字符串filemanagerstring=selectedImageUri.getPath();
//媒体画廊
字符串selectedImagePath=getPath(selectedImageUri);
如果(selectedImagePath!=null){
filePath=selectedImagePath;
}else if(filemanagerstring!=null){
filePath=filemanagerstring;
}否则{
Toast.makeText(getActivity().getApplicationContext(),“未知路径”,
Toast.LENGTH_LONG).show();
Log.e(“位图”,“未知路径”);
}
if(filePath!=null){
解码文件(文件路径);
}否则{
位图=空;
}
}捕获(例外e){
Toast.makeText(getActivity().getApplicationContext(),“内部错误”,
Toast.LENGTH_LONG).show();
Log.e(e.getClass().getName(),e.getMessage(),e);
}
}
打破
违约:
}
}
}

此处:我已经浏览了该链接和其他许多页面,但我无法获得我的解决方案。无论如何,谢谢!@AstralProjection
public class Drawer extends SherlockFragmentActivity {

// Declare Variable
DrawerLayout mDrawerLayout;
ListView mDrawerList;
ActionBarDrawerToggle mDrawerToggle;
MenuListAdapter mMenuAdapter;
String[] title;
String[] subtitle;
int[] icon;
Fragment fragment1 = new Fragment1();
Fragment fragment2 = new Fragment2();

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.drawer_main);

    // Generate title
    title = new String[] { "Post An Ad", "Edit Profile", "Logout"};

    // Generate subtitle
    subtitle = new String[] { "Check Your Profile", "Edit Your Profile","Exit"};

    // Generate icon
    icon = new int[] { R.drawable.action_about, R.drawable.action_settings, R.drawable.action_about};

    // Locate DrawerLayout in drawer_main.xml
    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);

    // Locate ListView in drawer_main.xml
    mDrawerList = (ListView) findViewById(R.id.left_drawer);

    // Set a custom shadow that overlays the main content when the drawer
    // opens
    mDrawerLayout.setDrawerShadow(R.drawable.drawer_shadow,
            GravityCompat.START);

    // Pass results to MenuListAdapter Class
    mMenuAdapter = new MenuListAdapter(this, title, subtitle, icon);

    // Set the MenuListAdapter to the ListView
    mDrawerList.setAdapter(mMenuAdapter);

    // Capture button clicks on side menu
    mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

    // Enable ActionBar app icon to behave as action to toggle nav drawer
    getSupportActionBar().setHomeButtonEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    // ActionBarDrawerToggle ties together the the proper interactions
    // between the sliding drawer and the action bar app icon
    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.drawable.ic_drawer, R.string.drawer_open,
            R.string.drawer_close) {

        public void onDrawerClosed(View view) {
            // TODO Auto-generated method stub
            super.onDrawerClosed(view);
        }

        public void onDrawerOpened(View drawerView) {
            // TODO Auto-generated method stub
            super.onDrawerOpened(drawerView);
        }
    };

    mDrawerLayout.setDrawerListener(mDrawerToggle);

    if (savedInstanceState == null) {
        selectItem(0);
    }
}
  // The click listener for ListView in the navigation drawer
private class DrawerItemClickListener implements
        ListView.OnItemClickListener {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position,
            long id) {
        selectItem(position);
    }
}

private void selectItem(int position) {

    FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
    // Locate Position
    switch (position) {
    case 0:
        ft.replace(R.id.content_frame, fragment1);
        break;
    case 1:
        ft.replace(R.id.content_frame, fragment2);
        break;
    case 2:
        finish();
        break;
}
    ft.commit();
    mDrawerList.setItemChecked(position, true);
    // Close drawer
    mDrawerLayout.closeDrawer(mDrawerList);
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggles
    mDrawerToggle.onConfigurationChanged(newConfig);
}

@Override
protected void onResume() {  
    // TODO Auto-generated method stub
    super.onResume();
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub

    Log.e("In drawer", "onactivity result");
    super.onActivityResult(requestCode, resultCode, data);
}
}
public class Fragment1 extends SherlockFragment {
// Declare Variabl
private FragmentTabHost mTabHost;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {
    // Create FragmentTabHost
    mTabHost = new FragmentTabHost(getActivity());
    // Locate fragment1.xml to create FragmentTabHost
    mTabHost.setup(getActivity(), getChildFragmentManager(), R.layout.fragment1);
    // Create Tab 1
    mTabHost.addTab(mTabHost.newTabSpec("tab1").setIndicator("My Ads"), FragmentTab1.class, null);
    // Create Tab 2
    mTabHost.addTab(mTabHost.newTabSpec("tab2").setIndicator("Find Stuffs"), FragmentTab2.class, null);

    return mTabHost;
}

// Detach FragmentTabHost
@Override
public void onDetach() {
    super.onDetach();

    try {
        Field childFragmentManager = Fragment.class
                .getDeclaredField("mChildFragmentManager");
        childFragmentManager.setAccessible(true);
        childFragmentManager.set(this, null);

    } catch (NoSuchFieldException e) {
        throw new RuntimeException(e);
    } catch (IllegalAccessException e) {
        throw new RuntimeException(e);
    }
}
// Remove FragmentTabHost 
@Override
public void onDestroyView() {
    super.onDestroyView();
    mTabHost = null;
}


public void onActivityResult(int requestCode, int resultCode, Intent intent) {
    super.onActivityResult(requestCode, resultCode, intent);
    Log.e("In fragment1", "onactivity result");
    Fragment fragment = (Fragment) getChildFragmentManager().getFragment();   
    if(fragment != null){
          fragment.onActivityResult(requestCode, resultCode, intent);
    }
  }
}
public class FragmentTab1 extends SherlockFragment {


ArrayList<HashMap<String, String>> adList;

private static final int PICK_IMAGE = 1;

@SuppressLint("NewApi")
@TargetApi(Build.VERSION_CODES.GINGERBREAD)
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
      Bundle savedInstanceState) {


    Log.e("onCreateView", "entry1");
  View rootView = inflater.inflate(R.layout.fragmenttab1, container, false);

  if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);  
    }
    postAd = (Button) rootView.findViewById(R.id.bpostAd);
    discription = (EditText)rootView.findViewById(R.id.etDiscription);
    price = (EditText)rootView.findViewById(R.id.etPrice);
    final RadioGroup adType = (RadioGroup)rootView.findViewById(R.id.radioGroup);
    RadioButton buy = (RadioButton)rootView.findViewById(R.id.rbBuy);
    RadioButton sell = (RadioButton)rootView.findViewById(R.id.rbSell);
    browse = (Button)rootView.findViewById(R.id.bBrowse);
    msgLength = (TextView)rootView.findViewById(R.id.tvLength);
    lv = (ListView)rootView.findViewById(R.id.listView1);


    SharedPreferences mPrefs = getActivity().getSharedPreferences("IDvalue", 0);
    userid = mPrefs.getString("userIdKey", null);
    adList = new ArrayList<HashMap<String, String>>();
    new LoadMyAds().execute();



    postAd.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // Do something
    });

    browse.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            try {

                Intent intent = new Intent(); intent.setType("image/*"); 
                intent.setAction(Intent.ACTION_GET_CONTENT); 
                startActivityForResult(intent, 1);
            } catch (Exception e) {
                Toast.makeText(getActivity().getApplicationContext(), "error",
                        Toast.LENGTH_LONG).show();
                Log.e(e.getClass().getName(), e.getMessage(), e);
            }
        }
    });
  return rootView;
  }
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);
    Log.e("onActivity Result", "Image");

//this is what which I'm unable to call
//this function is works fine when i used it in single activity instead of fragment

    switch (requestCode) {
    case PICK_IMAGE:
        if (resultCode == Activity.RESULT_OK) {
            Uri selectedImageUri = data.getData();
            String filePath = null;

            try {
                // OI FILE Manager
                String filemanagerstring = selectedImageUri.getPath();

                // MEDIA GALLERY
                String selectedImagePath = getPath(selectedImageUri);

                if (selectedImagePath != null) {
                    filePath = selectedImagePath;
                } else if (filemanagerstring != null) {
                    filePath = filemanagerstring;
                } else {
                    Toast.makeText(getActivity().getApplicationContext(), "Unknown path",
                            Toast.LENGTH_LONG).show();
                    Log.e("Bitmap", "Unknown path");
                }

                if (filePath != null) {
                    decodeFile(filePath);
                } else {
                    bitmap = null;
                }
            } catch (Exception e) {
                Toast.makeText(getActivity().getApplicationContext(), "Internal error",
                        Toast.LENGTH_LONG).show();
                Log.e(e.getClass().getName(), e.getMessage(), e);
            }
        }
        break;
    default:
    }
}
}