Fragment kann nicht gewirkt werden, um android.app.Aktivität

Ich weiß, diese Frage wurde vorhin gefragt, aber Sie wurden nicht in der gleichen situation bin ich in.

Mein problem ich muss meine PostPhotosActivity Klasse retainInstance. Die Art, wie ich bin, das zu tun, verwandelte Sie in ein fragment. Leider bin ich immer diese Fehlermeldung bekommen.

   12-13 14:38:55.669: E/AndroidRuntime(30234): FATAL EXCEPTION: main

12-13 14:38:55.669: E/AndroidRuntime(30234): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{trade.ly.tradely/trade.ly.tradely.PostPhotosActivity}: java.lang.ClassCastException: trade.ly.tradely.PostPhotosActivity cannot be cast to android.app.Activity

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread.access$600(ActivityThread.java:141)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.os.Handler.dispatchMessage(Handler.java:99)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.os.Looper.loop(Looper.java:137)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread.main(ActivityThread.java:5039)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at java.lang.reflect.Method.invokeNative(Native Method)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at java.lang.reflect.Method.invoke(Method.java:511)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at dalvik.system.NativeStart.main(Native Method)

12-13 14:38:55.669: E/AndroidRuntime(30234): Caused by: java.lang.ClassCastException: trade.ly.tradely.PostPhotosActivity cannot be cast to android.app.Activity

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.Instrumentation.newActivity(Instrumentation.java:1054)

12-13 14:38:55.669: E/AndroidRuntime(30234):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)

12-13 14:38:55.669: E/AndroidRuntime(30234): ... 11 more

Hier ist die PostPhotosActivity machen alle Fehler.

public class PostPhotosActivity extends android.app.Fragment {

public static final String TAG = "PostPhotosActivity";

String title, price, description, maincat, subcat, pname, pemail, pphone, pmeet, imageUri;

public static final String TEMP_PHOTO_FILE_NAME = "temp_photo.jpg";

public static final int REQUEST_CODE_GALLERY      = 0x1;
public static final int REQUEST_CODE_TAKE_PICTURE = 0x2;
public static final int REQUEST_CODE_CROP_IMAGE   = 0x3;
private ImageView mImageView;
private File      mFileTemp;
ParseFile file;
double latitude;
final String[] items = new String[] { "Take from camera", "Select from gallery" };

double longitude;
Button button;



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {


     View view = inflater.inflate(R.layout.activity_post_photos, container,false);


     Bundle extras= getActivity().getIntent().getExtras();
     if(extras!=null)
     {
        title = extras.getString("TITLE"); //get the value based on the key
        price = extras.getString("PRICE"); //get the value based on the key 
        description = extras.getString("DESCRIPTION"); //get the value based on the key
        maincat = extras.getString("MAINCAT"); //get the value based on the key 
        subcat = extras.getString("SUBCAT"); //get the value based on the key
        pname = extras.getString("PNAME"); //get the value based on the key 
        pemail = extras.getString("PEMAIL"); //get the value based on the key
        pphone = extras.getString("PPHONE"); //get the value based on the key 
        pmeet = extras.getString("PMEET"); //get the value based on the key
        latitude = extras.getDouble("lat");
        longitude = extras.getDouble("long");
    }  



Button newPost = (Button)view.findViewById(R.id.post_data);
newPost.setVisibility(View.INVISIBLE);

newPost.setOnClickListener(new View.OnClickListener() {
    public void onClick(View v) {
        //Perform action on click

        ParseGeoPoint point = new ParseGeoPoint(latitude, longitude);
        ParseObject setPost = new ParseObject("Posts");

        //Create an author relationship with the current user
        setPost.put("author", ParseUser.getCurrentUser());

        //Get location

        setPost.put("location", point);
        setPost.put("Title", title);
        setPost.put("Price", price);
        setPost.put("Description", description);
        setPost.put("MainCat", maincat);
        setPost.put("SubCat", subcat);
        setPost.put("PName", pname);
        setPost.put("PEmail", pemail);
        setPost.put("PPhone", pphone);
        setPost.put("PMeet", pmeet);
        setPost.put("Photo", file);

        setPost.saveInBackground();

        Intent intent = new Intent(getActivity(), Flow.class);
       startActivity(intent);
    }
});



    ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.select_dialog_item, items);
    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

    builder.setTitle("Select Image");
    builder.setAdapter(adapter, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) { //pick from
                                                                //camera
            if (item == 0) {

                takePicture();

            } else { //pick from file

                openGallery();

            }
        }
    });

    final AlertDialog dialog = builder.create();

    mImageView = (ImageView) view.findViewById(R.id.iv_photo);
    mImageView.setOnClickListener(new OnClickListener() {
        public void onClick(View v) {

            dialog.show();
        }
    });



        String state = Environment.getExternalStorageState();
        if (Environment.MEDIA_MOUNTED.equals(state)) {
                mFileTemp = new File(Environment.getExternalStorageDirectory(), TEMP_PHOTO_FILE_NAME);
        }
        else {
                mFileTemp = new File(getActivity().getFilesDir(), TEMP_PHOTO_FILE_NAME);
        }
        setRetainInstance(true);
        return view;

}

private void takePicture() {

    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

    try {
            Uri mImageCaptureUri = null;
            String state = Environment.getExternalStorageState();
            if (Environment.MEDIA_MOUNTED.equals(state)) {
                    mImageCaptureUri = Uri.fromFile(mFileTemp);
            }
            else {
                    /*
                     * The solution is taken from here: http://stackoverflow.com/questions/10042695/how-to-get-camera-result-as-a-uri-in-data-folder
                     */
                    mImageCaptureUri = InternalStorageContentProvider.CONTENT_URI;
            }        
        intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mImageCaptureUri);
        intent.putExtra("return-data", true);
        startActivityForResult(intent, REQUEST_CODE_TAKE_PICTURE);
    } catch (ActivityNotFoundException e) {

        Log.d(TAG, "cannot take picture", e);
    }
}

private void openGallery() {

    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, REQUEST_CODE_GALLERY);
}

private void startCropImage() {

    Intent intent = new Intent(getActivity(), CropImage.class);
    intent.putExtra(CropImage.IMAGE_PATH, mFileTemp.getPath());
    intent.putExtra(CropImage.SCALE, true);

    intent.putExtra(CropImage.ASPECT_X, 1);
    intent.putExtra(CropImage.ASPECT_Y, 1);

    startActivityForResult(intent, REQUEST_CODE_CROP_IMAGE);
}

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

    if (resultCode != Activity.RESULT_OK) {

        return;
    }

    Bitmap bitmap;

    switch (requestCode) {

        case REQUEST_CODE_GALLERY:

            try {

                InputStream inputStream = getActivity().getContentResolver().openInputStream(data.getData());
                FileOutputStream fileOutputStream = new FileOutputStream(mFileTemp);
                copyStream(inputStream, fileOutputStream);
                fileOutputStream.close();
                inputStream.close();

                startCropImage();

            } catch (Exception e) {

                Log.e(TAG, "Error while creating temp file", e);
            }

            break;
        case REQUEST_CODE_TAKE_PICTURE:

            startCropImage();
            break;
        case REQUEST_CODE_CROP_IMAGE:

            String path = data.getStringExtra(CropImage.IMAGE_PATH);
            if (path == null) {

                return;
            }

            //byte[] idata = path.getBytes();
            Bitmap picture = BitmapFactory.decodeFile(path);
            ByteArrayOutputStream stream = new ByteArrayOutputStream();
            picture.compress(Bitmap.CompressFormat.JPEG, 100, stream);
            //get byte array here
            byte[] idata= stream.toByteArray();

            file = new ParseFile("photo.jpg", idata);
            file.saveInBackground();

            bitmap = BitmapFactory.decodeFile(mFileTemp.getPath());

            mImageView.setImageBitmap(bitmap);
            button.setVisibility(View.VISIBLE);
            break;
    }
    super.onActivityResult(requestCode, resultCode, data);
}





public static void copyStream(InputStream input, OutputStream output)
        throws IOException {

    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = input.read(buffer)) != -1) {
        output.write(buffer, 0, bytesRead);
    }
}

}

Manifest

 <activity
        android:name="trade.ly.tradely.PostPhotosActivity"
        android:label="@string/title_activity_post_photos">
    </activity>

Klasse Aktivität wo das fragment erstellt wird onClick

    public class PostActivity extends FragmentActivity implements
PageFragmentCallbacks, ReviewFragment.Callbacks, ModelCallbacks {
    private ViewPager mPager;
    private MyPagerAdapter mPagerAdapter;

    private boolean mEditingAfterReview;

    private AbstractWizardModel mWizardModel = new SandwichWizardModel(this);

    private boolean mConsumePageSelectedEvent;

    private Button mNextButton;
    private Button mPrevButton;
    String user_name;
    String uemail;

    private List<Page> mCurrentPageSequence;
    private StepPagerStrip mStepPagerStrip;

    public static final String TAG = "PostActivity";
    double latitude, longitude;

    public void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_post);

        Bundle extras = getIntent().getExtras();
        if(extras !=null) {
        //Get the results
        user_name = extras.getString("name");
        uemail = extras.getString("email");
        }   

        Bundle data = new Bundle();
        if (!TextUtils.isEmpty(CustomerInfoPage.EMAIL_DATA_KEY)) {
           data.putString(CustomerInfoPage.EMAIL_DATA_KEY, uemail);
           mWizardModel.findByKey("Your Info").resetData(data);
     }

        GpsLocationTracker mGpsLocationTracker = new GpsLocationTracker(PostActivity.this);


        //Set GPS Location fetched address

       if (mGpsLocationTracker.canGetLocation()) 
       {
           latitude = mGpsLocationTracker.getLatitude();
           longitude = mGpsLocationTracker.getLongitude();
           Log.i(TAG, String.format("latitude: %s", latitude));
           Log.i(TAG, String.format("longitude: %s", longitude));

       } 
       else 
       {
           mGpsLocationTracker.showSettingsAlert();
       }

        if (savedInstanceState != null) {
            mWizardModel.load(savedInstanceState.getBundle("model"));
        }

        mWizardModel.registerListener(this);

        mPagerAdapter = new MyPagerAdapter(getSupportFragmentManager());
        mPager = (ViewPager) findViewById(R.id.pager);
        mPager.setAdapter(mPagerAdapter);
        mStepPagerStrip = (StepPagerStrip) findViewById(R.id.strip);
        mStepPagerStrip.setOnPageSelectedListener(new StepPagerStrip.OnPageSelectedListener() {
            @Override
            public void onPageStripSelected(int position) {
                position = Math.min(mPagerAdapter.getCount() - 1, position);
                if (mPager.getCurrentItem() != position) {
                    mPager.setCurrentItem(position);
                }
            }
        });

        mNextButton = (Button) findViewById(R.id.next_button);
        mPrevButton = (Button) findViewById(R.id.prev_button);

        mPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
            @Override
            public void onPageSelected(int position) {
                mStepPagerStrip.setCurrentPage(position);

                if (mConsumePageSelectedEvent) {
                    mConsumePageSelectedEvent = false;
                    return;
                }

                mEditingAfterReview = false;
                updateBottomBar();
            }
        });

        mNextButton.setOnClickListener(new View.OnClickListener() {
            @SuppressLint("ValidFragment")
            @Override
            public void onClick(View view) {

                if (mPager.getCurrentItem() == mCurrentPageSequence.size()) {


                    DialogFragment dg = new DialogFragment() {
                        @Override
                        public Dialog onCreateDialog(Bundle savedInstanceState) {
                            return new AlertDialog.Builder(getActivity())
                                    .setMessage(R.string.submit_confirm_message)
                                    .setPositiveButton(
                                            R.string.submit_confirm_button,
                                            new DialogInterface.OnClickListener() {
                                                public void onClick(
                                                        DialogInterface dialog,
                                                        int id) {

                                                    String title = mWizardModel
                                                            .findByKey(
                                                                    "Post Info")
                                                            .getData()
                                                            .getString(
                                                                    TpdModel.TITLE_DATA_KEY);

                                                    String price = mWizardModel
                                                            .findByKey(
                                                                    "Post Info")
                                                            .getData()
                                                            .getString(
                                                                    TpdModel.PRICE_DATA_KEY);

                                                    String description = mWizardModel
                                                            .findByKey(
                                                                    "Post Info")
                                                            .getData()
                                                            .getString(
                                                                    TpdModel.DESCRIPTION_DATA_KEY);

                                                    String maincat = mWizardModel
                                                            .findByKey(
                                                                    "Main Category")
                                                            .getData()
                                                            .getString(
                                                                    Page.SIMPLE_DATA_KEY);

                                                    String subcat = mWizardModel
                                                            .findByKey(
                                                                    "Sub Category")
                                                            .getData()
                                                            .getString(
                                                                    Page.SIMPLE_DATA_KEY);

                                                    String pname = mWizardModel
                                                            .findByKey(
                                                                    "Your Info")
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.NAME_DATA_KEY);

                                                    String pemail = mWizardModel
                                                            .findByKey(
                                                                    "Your Info")
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.EMAIL_DATA_KEY);

                                                    String pphone = mWizardModel
                                                            .findByKey(
                                                                    "Your Info")
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.PHONE_DATA_KEY);

                                                    String pmeet = mWizardModel
                                                            .findByKey(
                                                                    "Your Info")
                                                            .getData()
                                                            .getString(
                                                                    CustomerInfoPage.MEET_DATA_KEY);

                                                    Intent i = new Intent(
                                                            PostActivity.this,
                                                            PostPhotosActivity.class);
                                                    i.putExtra("TITLE", title);
                                                    i.putExtra("PRICE", price);
                                                    i.putExtra("DESCRIPTION",
                                                            description);
                                                    i.putExtra("MAINCAT",
                                                            maincat);
                                                    i.putExtra("SUBCAT", subcat);
                                                    i.putExtra("PNAME", pname);
                                                    i.putExtra("PEMAIL", pemail);
                                                    i.putExtra("PPHONE", pphone);
                                                    i.putExtra("PMEET", pmeet);
                                                    i.putExtra("lat", latitude);
                                                    i.putExtra("long", longitude);
                                                    startActivityForResult(i, 0);

                                                }
                                            })
                                    .setNegativeButton(android.R.string.cancel,
                                            null).create();
                        }

                    };
                dg.show(getSupportFragmentManager(), "place_order_dialog");
            } else {
                    if (mEditingAfterReview) {
                        mPager.setCurrentItem(mPagerAdapter.getCount() - 1);
                    } else {
                        mPager.setCurrentItem(mPager.getCurrentItem() + 1);
                    }
                }

            }
        });

        mPrevButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                    mPager.setCurrentItem(mPager.getCurrentItem() - 1);
            }
    });

    onPageTreeChanged();
    updateBottomBar();
}

@Override
public void onPageTreeChanged() {
    mCurrentPageSequence = mWizardModel.getCurrentPageSequence();
    recalculateCutOffPage();
    mStepPagerStrip.setPageCount(mCurrentPageSequence.size() + 1); //+ 1 =
                                                                                                                                    //review
                                                                                                                                    //step
    mPagerAdapter.notifyDataSetChanged();
    updateBottomBar();
}

private void updateBottomBar() {
    int position = mPager.getCurrentItem();
    if (position == mCurrentPageSequence.size()) {
            mNextButton.setText(R.string.finish);
            mNextButton.setBackgroundResource(R.drawable.finish_background);
            mNextButton.setTextAppearance(this, R.style.TextAppearanceFinish);
    } else {
            mNextButton.setText(mEditingAfterReview ? R.string.review
                            : R.string.next);
            mNextButton
                            .setBackgroundResource(R.drawable.selectable_item_background);
            TypedValue v = new TypedValue();
            getTheme().resolveAttribute(android.R.attr.textAppearanceMedium, v,
                            true);
            mNextButton.setTextAppearance(this, v.resourceId);
            mNextButton.setEnabled(position != mPagerAdapter.getCutOffPage());
    }

    mPrevButton
                    .setVisibility(position <= 0 ? View.INVISIBLE : View.VISIBLE);
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mWizardModel.unregisterListener(this);
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    outState.putBundle("model", mWizardModel.save());
}

@Override
public AbstractWizardModel onGetModel() {
    return mWizardModel;
}

@Override
public void onEditScreenAfterReview(String key) {
    for (int i = mCurrentPageSequence.size() - 1; i >= 0; i--) {
            if (mCurrentPageSequence.get(i).getKey().equals(key)) {
                    mConsumePageSelectedEvent = true;
                    mEditingAfterReview = true;
                    mPager.setCurrentItem(i);
                    updateBottomBar();
                    break;
            }
    }
}

@Override
public void onPageDataChanged(Page page) {
    if (page.isRequired()) {
            if (recalculateCutOffPage()) {
                    mPagerAdapter.notifyDataSetChanged();
                    updateBottomBar();
            }
    }
}

@Override
public Page onGetPage(String key) {
    return mWizardModel.findByKey(key);
}

private boolean recalculateCutOffPage() {
    //Cut off the pager adapter at first required page that isn't completed
    int cutOffPage = mCurrentPageSequence.size() + 1;
    for (int i = 0; i < mCurrentPageSequence.size(); i++) {
            Page page = mCurrentPageSequence.get(i);
            if (page.isRequired() && !page.isCompleted()) {
                    cutOffPage = i;
                    break;
            }
    }

    if (mPagerAdapter.getCutOffPage() != cutOffPage) {
            mPagerAdapter.setCutOffPage(cutOffPage);
            return true;
    }

    return false;
}

public class MyPagerAdapter extends FragmentStatePagerAdapter {
    private int mCutOffPage;
    private Fragment mPrimaryItem;

    public MyPagerAdapter(FragmentManager fm) {
            super(fm);
    }

    @Override
    public Fragment getItem(int i) {
            if (i >= mCurrentPageSequence.size()) {
                    return new ReviewFragment();
            }

            return mCurrentPageSequence.get(i).createFragment();
    }

    @Override
    public int getItemPosition(Object object) {
            //TODO: be smarter about this
            if (object == mPrimaryItem) {
                    //Re-use the current fragment (its position never changes)
                    return POSITION_UNCHANGED;
            }

            return POSITION_NONE;
    }

    @Override
    public void setPrimaryItem(ViewGroup container, int position,
                    Object object) {
            super.setPrimaryItem(container, position, object);
            mPrimaryItem = (Fragment) object;
    }

    @Override
    public int getCount() {
            return Math.min(mCutOffPage + 1, mCurrentPageSequence == null ? 1
                            : mCurrentPageSequence.size() + 1);
    }

    public void setCutOffPage(int cutOffPage) {
            if (cutOffPage < 0) {
                    cutOffPage = Integer.MAX_VALUE;
            }
            mCutOffPage = cutOffPage;
    }

    public int getCutOffPage() {
            return mCutOffPage;
    }

    }
}
  • Poste bitte den gesamten StackTrace.
  • Bitte poste Schnitt von code, wenn Sie erstellen oder verwenden Sie Ihre PostPhotosActivity Klasse (manifest oder irgendwo im code). Fragment ist nicht eine Tätigkeit, eine, die ich denke, Sie zu benutzen versuchen, dieses fragment irgendwo, wo Aktivität erforderlich ist.
  • Bitte überprüfen Sie die edit!
InformationsquelleAutor Derek | 2013-12-13
Schreibe einen Kommentar