Rana Talha Tariq
Rana Talha Tariq

Reputation: 435

Having code problems from MainActivity to FragmentActivity

I wrote a simple code in MainActivity with its xml code previously which run successfully. Now, I want to make a fragment and run that MainActivity code in that fragment. I have tried everything, even by combining both codes etc. but all in vain. I'm attaching my MainActivity code below. This is the one I want to use in Fragment. I already know that fragment is like sub-activity of an activity and both have separate xmls too which I also know how to use. Just unable to use my MainActivity code from old app as FragmentActivity in a new app.
1) MainActivity Code which needs to act as a Fragment

package com.ranatalha.userauthority;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.TextView;

public class MainActivity
        extends AppCompatActivity
        implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener{

    private TextView mytext;
    private GestureDetector gestureDetector;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); //this is above two lines cox phly content set hoga tbi agy kam hna na
        this.gestureDetector = new GestureDetector(this, this);
        gestureDetector.setOnDoubleTapListener(this); }

//******************Upon clicking the button*************************

    public void changetextshort(View v) {
        mytext = (TextView) findViewById(R.id.mytext);
        mytext.setText("Surpriseeee"); }

    //******************initializing touch event*************************
    @Override
    public boolean onTouchEvent(MotionEvent event) {
        this.gestureDetector.onTouchEvent(event);
        return super.onTouchEvent(event);}

    //******************Implements Methods from alt+ins(0) for touch properties*************************
    @Override
    public boolean onSingleTapConfirmed(MotionEvent motionEvent) {
        mytext.setText("I tapped Once");
        return false;}

    @Override
    public boolean onDoubleTap(MotionEvent motionEvent) {
        mytext.setText("I tapped Twice");
        return false;}

    @Override
    public boolean onDoubleTapEvent(MotionEvent motionEvent) {
        mytext.setText("Double Tap Event Occurred");
        return false;}

    @Override
    public boolean onDown(MotionEvent motionEvent) {
        mytext.setText("Down goes");
        return false;}

    @Override
    public void onShowPress(MotionEvent motionEvent) {
        mytext.setText("I have pressed");}

    @Override
    public boolean onSingleTapUp(MotionEvent motionEvent) {
        mytext.setText("Single Tap Up");
        return false;}

    @Override
    public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        mytext.setText("I'm Scrolling");
        return false;}

    @Override
    public void onLongPress(MotionEvent motionEvent) {
        mytext.setText("I long pressed");}

    @Override
    public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
        mytext.setText("I FLINNGED");
        return false; }
}


2) Fragment Code (MainActivity is not having any code now except the basic code of Mainactivity like class name and OnCreate code - although I have added Mainactivity code in 3rd point too which needs to be actually almost like that when we make fragments in android app)

package com.ranatalha.userauthority;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.view.GestureDetector;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class TopSectionFragment extends Fragment {

    public class Top
            extends AppCompatActivity
            implements GestureDetector.OnGestureListener, GestureDetector.OnDoubleTapListener{

        private TextView mytext;
        private GestureDetector gestureDetector;


    //******************Override method oncreateview for fragment*************************
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.top_section_fragment,container, false);
        this.gestureDetector = new GestureDetector(this, this);
        gestureDetector.setOnDoubleTapListener(this);
        return view; //designing of top section fragment completed
         }

//******************Upon clicking the button*************************

        public void changetextshort(View v) {
            mytext = (TextView) findViewById(R.id.mytext);
            mytext.setText("Surpriseeee"); }

        //******************initializing touch event*************************
        @Override
        public boolean onTouchEvent(MotionEvent event) {
            this.gestureDetector.onTouchEvent(event);
            return super.onTouchEvent(event);}

        //******************Implements Methods from alt+ins(0) for touch properties*************************
        @Override
        public boolean onSingleTapConfirmed(MotionEvent motionEvent) {
            mytext.setText("I tapped Once");
            return false;}

        @Override
        public boolean onDoubleTap(MotionEvent motionEvent) {
            mytext.setText("I tapped Twice");
            return false;}

        @Override
        public boolean onDoubleTapEvent(MotionEvent motionEvent) {
            mytext.setText("Double Tap Event Occurred");
            return false;}

        @Override
        public boolean onDown(MotionEvent motionEvent) {
            mytext.setText("Down goes");
            return false;}

        @Override
        public void onShowPress(MotionEvent motionEvent) {
            mytext.setText("I have pressed");}

        @Override
        public boolean onSingleTapUp(MotionEvent motionEvent) {
            mytext.setText("Single Tap Up");
            return false;}

        @Override
        public boolean onScroll(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
            mytext.setText("I'm Scrolling");
            return false;}

        @Override
        public void onLongPress(MotionEvent motionEvent) {
            mytext.setText("I long pressed");}

        @Override
        public boolean onFling(MotionEvent motionEvent, MotionEvent motionEvent1, float v, float v1) {
            mytext.setText("I FLINNGED");
            return false; }
    }
}


3) MainActivity code (which will incorporate Fragment sub-activity)

package com.ranatalha.userauthority;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;

public class MainActivity
        extends AppCompatActivity {

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

Upvotes: 0

Views: 124

Answers (2)

Adam Forbis
Adam Forbis

Reputation: 461

One of the main things to keep in mind when converting code from activities and fragments is that you may have to switch things that use context in them.
This line: this.gestureDetector = new GestureDetector(this, this); is likely one of the things that is giving you trouble.
This:

GestureDetector(Context context, GestureDetector.OnGestureListener listener)

is probably the constructor you are trying to use. The parameters that are context, will need to be changed from this in an activity to getContext() (or to something that extends Context) in a fragment.

For creating the fragment in the first place:
https://developer.android.com/guide/components/fragments.html

// Create new fragment and transaction
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();

// Replace whatever is in the fragment_container view with this fragment,
// and add the transaction to the back stack
transaction.replace(R.id.fragment_container, newFragment);
transaction.addToBackStack(null);

// Commit the transaction
transaction.commit();


The container mentioned in the code sample is normally something like a FrameLayout.

Upvotes: 2

vasquez
vasquez

Reputation: 449

It is not clear what you mean by "make a fragment and run that MainActivity code in that fragment"...

If you want to start an activity and make it overlay the Fragment you can try the code from MCeley in Start an activity from a fragment

> Intent intent = new Intent(getActivity(), mFragmentFavorite.class);
> startActivity(intent);

Upvotes: 0

Related Questions