从 MainActivity 到 FragmentActivity 有代码问题

Having code problems from MainActivity to FragmentActivity

我在 MainActivity 中用它的 xml 代码写了一个简单的代码,运行 成功了。现在,我想制作一个片段和 运行 该片段中的 MainActivity 代码。我已经尝试了一切,甚至通过组合两个代码等,但都是徒劳的。我在下面附上了我的 MainActivity 代码。这是我想在 Fragment 中使用的那个。我已经知道该片段就像 activity 的子 activity,并且两者都有单独的 xml,我也知道如何使用。只是无法将旧应用程序中的 MainActivity 代码用作新应用程序中的 FragmentActivity。
1) MainActivity代码需要充当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) 片段代码(MainActivity 现在没有任何代码,除了 Mainactivity 的基本代码,如 class 名称和 OnCreate 代码 - 虽然我已经添加了 Mainactivity 代码在第 3 点,当我们在 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代码(会合并Fragment子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); }
}

不清楚你所说的 "make a fragment and run that MainActivity code in that fragment"...

是什么意思

如果您想启动一个 activity 并使其覆盖片段,您可以尝试 Start an activity from a fragment

中来自 MCeley 的代码
> Intent intent = new Intent(getActivity(), mFragmentFavorite.class);
> startActivity(intent);

从活动和片段转换代码时要记住的主要事情之一是,您可能必须切换在其中使用上下文的内容。
这行:this.gestureDetector = new GestureDetector(this, this); 可能是给您带来麻烦的事情之一。
这个:

GestureDetector(Context context, GestureDetector.OnGestureListener listener)

可能是您尝试使用的构造函数。 作为上下文的参数需要从 activity 中的 this 更改为片段中的 getContext()(或扩展上下文的内容)。

首先创建片段:
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();


代码示例中提到的容器通常类似于 FrameLayout.