从MainActivity到FragmentActivity

时间:2016-06-21 12:03:41

标签: java android android-fragments fragment android-fragmentactivity

我在MainActivity中编写了一个简单的代码,其xml代码以前运行成功。现在,我想创建一个片段并在该片段中运行该MainActivity代码。我已经尝试了所有的东西,即使将两个代码组合在一起,但都是徒劳的。我在下面附上了我的MainActivity代码。这是我想在Fragment中使用的那个。我已经知道该片段就像一个活动的子活动,并且它们都有单独的xmls,我也知道如何使用。无法在新应用中将旧应用中的MainActivity代码用作FragmentActivity。
1)需要充当片段的MainActivity Code

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现在没有任何代码,除了类名和OnCreate代码之类的Mainactivity的基本代码 - 虽然我在第3点也添加了Mainactivity代码,当我们制作片段时,它实际上几乎就像那样在Android应用程序中)

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子活动)

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); }
}

2 个答案:

答案 0 :(得分:2)

从活动和片段转换代码时要记住的主要事项之一是您可能必须切换使用上下文的内容。
这一行:t1可能是给你带来麻烦的事情之一 这个:

  

GestureDetector(上下文上下文,GestureDetector.OnGestureListener侦听器)

可能是您尝试使用的构造函数。 作为上下文的参数需要从活动中的this.gestureDetector = new GestureDetector(this, this);更改为片段中的this(或扩展上下文的内容)。

首先创建片段:
https://developer.android.com/guide/components/fragments.html

getContext()


代码示例中提到的容器通常类似于// 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();

答案 1 :(得分:0)

目前尚不清楚“制作片段并在该片段中运行MainActivity代码”是什么意思......

如果您想要开始一项活动并使其覆盖片段,您可以在Start an activity from a fragment

中尝试使用MCeley中的代码
> Intent intent = new Intent(getActivity(), mFragmentFavorite.class);
> startActivity(intent);