当我完成所选图像时,未调用onActivityResult

时间:2015-10-30 07:50:52

标签: java android android-fragments android-intent

我想将设备中的图片添加到应用中。

我将使用David Manpearl的解决方案openImageIntent

我的代码看起来不错,但是当我运行应用程序并在应用程序中选择图像时,问题是onActivityResult当我选择完图像时。请查看我的代码并告诉我我做错了什么。感谢任何建议。

更新信息:此片段是另一个片段的父级名称​​&#34; EventFragment&#34; 因为我使用了 FragmentTabHost < / em>在 EventFragment 中显示 EventAdd 类片段,我有 MainActivity 它&#39; sa ActionBarActivity这是应用程序启动时的主要活动。当我从MainActivity单击EventFragment菜单时,它将转到EventFragment,并在FragmentTabHost中将它添加到EventAdd中。我们来看看代码:

MainActivity:

public class MainActivity extends ActionBarActivity implements
        NavigationDrawerFragment.NavigationDrawerCallbacks {

    public static String Username;

    /**
     * Fragment managing the behaviors, interactions and presentation of the
     * navigation drawer.
     */
    private NavigationDrawerFragment mNavigationDrawerFragment;

    /**
     * Used to store the last screen title. For use in
     * {@link #restoreActionBar()}.
     */
    private CharSequence mTitle;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        Intent myIntent = getIntent();
        Username =  myIntent.getStringExtra("username");

        mNavigationDrawerFragment = (NavigationDrawerFragment) getSupportFragmentManager()
                .findFragmentById(R.id.navigation_drawer);
        mTitle = getTitle();

        // Set up the drawer.
        mNavigationDrawerFragment.setUp(R.id.navigation_drawer,
                (DrawerLayout) findViewById(R.id.drawer_layout));

    }


    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();

    }

    @Override
    public void onNavigationDrawerItemSelected(int position) {
        // update the main content by replacing fragments
        FragmentManager fragmentManager = getSupportFragmentManager();

        fragmentManager
                .beginTransaction()
                .replace(R.id.container,
                        PlaceholderFragment.newInstance(position + 1)).commit();
    }

    public void onSectionAttached(int number) {
        switch (number) {
        case 1:
            mTitle = getString(R.string.title_sectionMain);
            break;
        case 2:
            mTitle = getString(R.string.title_section1);
            break;
        case 3:
            mTitle = getString(R.string.title_section2);
            break;
        case 4:
            mTitle = getString(R.string.title_section3);
            break;
        }
    }

    public void restoreActionBar() {
        ActionBar actionBar = getSupportActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setTitle(mTitle);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        if (!mNavigationDrawerFragment.isDrawerOpen()) {
            // Only show items in the action bar relevant to this screen
            // if the drawer is not showing. Otherwise, let the drawer
            // decide what to show in the action bar.
            getMenuInflater().inflate(R.menu.main, menu);
            restoreActionBar();
            return true;
        }
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();
        if (id == R.id.action_settings) {
            return true;
        }
        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {
        /**
         * The fragment argument representing the section number for this
         * fragment.
         */
        private static final String ARG_SECTION_NUMBER = "section_number";

        /**
         * Returns a new instance of this fragment for the given section number.
         */
        public static Fragment newInstance(int sectionNumber) {
            Fragment fragment = null;
             switch(sectionNumber) {
                default:
                case 1:
                     fragment = new PlaceholderFragment();
                    break;
                case 2:
                     fragment = new EventFragment();
                    break;
                case 3:
                    //Fragment fragment = new MyFragment2();
                    break;
                case 4:
                    //Fragment fragment = new MyFragment2();
                    break;
            }
            Bundle args = new Bundle();
            args.putInt(ARG_SECTION_NUMBER, sectionNumber);
            fragment.setArguments(args);
            return fragment;
        }

        public PlaceholderFragment() {
        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            View rootView = inflater.inflate(R.layout.fragment_main, container,
                    false);
            return rootView;
        }

        @Override
        public void onAttach(Activity activity) {
            super.onAttach(activity);
            ((MainActivity) activity).onSectionAttached(getArguments().getInt(
                    ARG_SECTION_NUMBER));
        }
    }

}

EventFragment:

public class EventFragment extends Fragment{

    @Override
    public void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
    }

    @Override
    public void onDestroyView() {
        // TODO Auto-generated method stub
        super.onDestroyView();
        mTabHost = null;
    }

    private FragmentTabHost mTabHost;


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub

        mTabHost = new FragmentTabHost(getActivity());
        mTabHost.setup(getActivity(), getChildFragmentManager(), R.layout.fragment_event);

        mTabHost.addTab(mTabHost.newTabSpec("Tab1").setIndicator("รายการแจ้งเหตุ"),
                EventListView.class, null);

        mTabHost.addTab(mTabHost.newTabSpec("Tab2").setIndicator("แจ้งเรื่องร้องเรียน"),EventAdd.class,null);

        return mTabHost;
    }



    public EventFragment() {
        // TODO Auto-generated constructor stub
    }

}

EventAdd Class Fragment:

public class EventAdd extends Fragment {
    private ArrayList<HashMap<String, String>> EventTypeList = null;
    private Spinner spinnerET;
    private List<String> spinnerETArray;
    private static final int SELECT_PICTURE_REQUEST_CODE = 0; 
    private ImageView imageView;
    private Bitmap photo;
    private Uri outputFileUri;
    private Button clearbtn;
    private Button AEbtn;
    private EditText name;
    private EditText detail;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        final View rootView = inflater.inflate(R.layout.fragment_event_add, container, false);
        SetGet sl = new SetGet();
        EventTypeList = sl.getArrayListET();
        spinnerET=(Spinner) rootView.findViewById(R.id.spinnerType);
        name = (EditText) rootView.findViewById(R.id.EditTextName);
        detail = (EditText) rootView.findViewById(R.id.editTextdetail);
        spinnerETArray = new ArrayList<String>();
        imageView = (ImageView)rootView.findViewById(R.id.imageView1);
        Button photoButton = (Button) rootView.findViewById(R.id.cam_btn);

        photoButton.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                openImageIntent();
            }
        });
        spinnerETArray.add("==เลือกประเภท==");
        for (HashMap<String, String> map : EventTypeList){           
             for (Entry<String, String> mapEntry : map.entrySet())   
                {  
                 if(mapEntry.getKey() == "event_type_name"){                    
                     spinnerETArray.add(mapEntry.getValue());                                                         
                 }                                                   
                }                                                                                                   
        }
        Log.d("spinnerETArray:",spinnerETArray.toString());
        ArrayAdapter<String> adapter =new ArrayAdapter<String>(this.getContext(),android.R.layout.simple_spinner_item, spinnerETArray);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinnerET.setAdapter(adapter);

        clearbtn = (Button) rootView.findViewById(R.id.Clearbtn);
        clearbtn.setOnClickListener(new View.OnClickListener() {

                @Override
                public void onClick(View v) {
                    clearInput();
                }
            });

        AEbtn = (Button) rootView.findViewById(R.id.AEbtn);
        AEbtn.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent Mapint = new Intent(getActivity(), MapMarkPointActivity.class);
                Mapint.putExtra("name", name.getText().toString());
                Mapint.putExtra("detail", detail.getText().toString());
                Mapint.putExtra("photo", photo);
                String text = spinnerET.getSelectedItem().toString();
                Integer typeId = null;
                String CurrentText = "";
                for (HashMap<String, String> map : EventTypeList){ 
                 for (Entry<String, String> mapEntry : map.entrySet())   
                    {
                     if(mapEntry.getKey() == "event_type_name"){ 
                        CurrentText = mapEntry.getValue();
                     }else if(mapEntry.getKey() == "event_type_id" && CurrentText == text){
                        String id = mapEntry.getValue();
                        typeId = Integer.parseInt(id);
                     }
                    }                                                  
                }
                Mapint.putExtra("typeId", typeId);
                startActivity(Mapint);
            }
        });

        return rootView;
    }

    protected void clearInput() {
        name.setText("");
        detail.setText("");
        spinnerET.setSelection(0);
        photo = null;
        imageView.setImageResource(R.drawable.ic_launcher);
    }

    private void openImageIntent(){

        // Determine Uri of camera image to save.
        final File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MyDir" + File.separator);
        root.mkdirs();
        final String fname = "img_"+ System.currentTimeMillis() + ".jpg";
        final File sdImageMainDirectory = new File(root, fname);
        outputFileUri = Uri.fromFile(sdImageMainDirectory);

            // Camera.
            final List<Intent> cameraIntents = new ArrayList<Intent>();
            final Intent captureIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
            final PackageManager packageManager = getContext().getPackageManager();
            final List<ResolveInfo> listCam = packageManager.queryIntentActivities(captureIntent, 0);
            for(ResolveInfo res : listCam) {
                final String packageName = res.activityInfo.packageName;
                final Intent intent = new Intent(captureIntent);
                intent.setComponent(new ComponentName(res.activityInfo.packageName, res.activityInfo.name));
                intent.setPackage(packageName);
                intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
                cameraIntents.add(intent);
            }

            // Filesystem.
            final Intent galleryIntent = new Intent();
            galleryIntent.setType("image/*");
            galleryIntent.setAction(Intent.ACTION_GET_CONTENT);

            // Chooser of filesystem options.
            final Intent chooserIntent = Intent.createChooser(galleryIntent, "Select Source");

            // Add the camera options.
            chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, cameraIntents.toArray(new Parcelable[cameraIntents.size()]));

            try{
                Log.d("startActivityForResult:","startActivityForResult");
                getParentFragment().startActivityForResult(chooserIntent, SELECT_PICTURE_REQUEST_CODE);
            }catch(Exception e){
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode,resultCode,data);

        Log.d("onActivityResult:","onActivityResult");
        if (resultCode == Activity.RESULT_OK) {
            Log.d("OK:","ok");
            if (requestCode == SELECT_PICTURE_REQUEST_CODE) {
                final boolean isCamera;
                if (data == null) {
                    isCamera = true;
                } else {
                    final String action = data.getAction();
                    if (action == null) {
                        isCamera = false;
                    } else {
                        isCamera = action.equals(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
                    }
                }

                Uri selectedImageUri;
                if (isCamera) {
                    selectedImageUri = outputFileUri;

                } else {
                    selectedImageUri = data == null ? null : data.getData();
                }
                Log.d("รูป:",selectedImageUri.toString());
                try {
                    photo = MediaStore.Images.Media.getBitmap(getActivity().getContentResolver(), selectedImageUri);
                    Log.d("รูป:",photo.toString());
                    imageView.setImageBitmap(photo);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

            }
        }else{
            Log.d("Error:",data.toString());
        }
    }

    public EventAdd() {
        super();
        // TODO Auto-generated constructor stub
    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }


}

1 个答案:

答案 0 :(得分:0)

在您的主机活动(MainActivity.java)中,您需要执行以下操作:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
}