Java 无法调用子片段的onActivityResult
我已经使用sharelockfragment实现了抽屉。我试图从gallery中选取图像,但该函数是在ChildFragment(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里到
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:
}
}
}