0

我在MainActivity中用它以前的xml代碼編寫了一個簡單的代碼,它可以成功運行。現在,我想製作一個片段並在該片段中運行MainActivity代碼。我已經嘗試了一切,即使通過結合兩種代碼等,但都是徒勞的。我在下面附加了我的MainActivity代碼。這是我想在片段中使用的一個。我已經知道片段就像一個活動的子活動,並且都有單獨的xmls,我也知道如何使用。只是無法將舊的應用程序中的MainActivity代碼用作新應用程序中的FragmentActivity。
1),其需要以充當片段MainActivity代碼從MainActivity到FragmentActivity產生代碼問題

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的像類名和OnCreate中代碼的基本代碼 - 雖然我已經在第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代碼(這將包括片段子活動)

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

我編輯了我的問題,並添加了片段代碼+ MainActivity代碼,並附有一些解釋。這可能會更有助於你瞭解我的問題:) –

回答

1

一個主要的事情要記住從MCeley代碼當從活動和片段轉換代碼時,您可能不得不切換使用上下文的東西。
此行:this.gestureDetector = new GestureDetector(this, this);可能是給你麻煩的事情之一。
此:

GestureDetector(上下文的背景下,GestureDetector.OnGestureListener聽衆)

可能是您要使用的構造函數。 上下文參數將需要從活動中的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

+0

現在我已編輯我的問題,並添加片段代碼+ MainActivity代碼也有一些解釋。它可能會更有助於你瞭解我的問題:) –

+0

@RanaTalhaTariq這更接近你所需要的? –

+0

我仍然無法在Android中將我的Activity作爲片段運行。沒有任何片段的活動可以100%正確運行,但是如果引入片段比應用程序打開但它在任何屏幕活動上崩潰! –

0

目前尚不清楚你的意思是什麼「做一個片段,並運行在該片段MainActivity代碼」 ...

如果你想開始一個活動,並使其覆蓋的片段,你可以嘗試在Start an activity from a fragment

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

我已編輯我的問題,並添加片段代碼+ MainActivity代碼也有一些解釋。它可能會更有助於你瞭解我的問題:) –