4

Bonjour, J'essaie de créer une application qui utilise deux classes différentes. Je suis conscient que je ne peux pas utiliser extend avec deux classes en Java. Comment pourrais-je séparer le code ci-dessous en deux classes différentes afin que l'on puisse étendre Fragment et l'autre AppCompatActivity?Utilisation des classes Fragment et AppCompatActivity

package com.example.oliver.myapplication; 

import android.support.v4.app.Fragment; 
import android.app.AlertDialog; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.ImageButton; 
import android.widget.TextView; 

import java.util.Random; 


public class MyFragment extends AppCompatActivity, Fragment { 

    Button b, b2; 
    MediaPlayer nice, burp; 
    ImageButton img; 
    int n; 
    MediaPlayer [] s = new MediaPlayer[6]; 
    AlertDialog.Builder adb; 

    public static MyFragment newInstance() { 
     MyFragment fragment = new MyFragment(); 
     return fragment; 
    } 

     public View onCreateView(LayoutInflater inflater, ViewGroup container, 
           Bundle savedInstanceState) { 
      View rootView = inflater.inflate(R.layout.my_fragment, container, false); 
      img = (ImageButton) rootView.findViewById(R.id.img); 

      s[0] = MediaPlayer.create(MyFragment.this, R.raw.burp); 
      s[1] = MediaPlayer.create(MyFragment.this, R.raw.robert); 
      s[2] = MediaPlayer.create(MyFragment.this, R.raw.burp2); 



     img.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       for (int i = 0; i < 1; i++) { 
        Random r = new Random(); 
        n = r.nextInt(3); 

        s[n].start(); 
       } 
      } 
     });return rootView; 


}} 
+0

Quel est le but de prolonger une activité et un fragment? Ils sont des constructions séparées dans Android. Exactement quelle fonctionnalité essayez-vous de combiner en essayant de tirer de ces deux parents? – JCricket

+0

Je veux être en mesure de glisser naviguer dans l'application et l'application utilise MediaPlayer pour jouer son –

+0

Mise en œuvre de navigation Swipe: http://developer.android.com/training/implementing-navigation/lateral.html – JCricket

Répondre

3

Le code ci-dessus n'est pas valide Java.

Une classe peut uniquement étendre une classe. Votre activité/fragment étend 2 classes en même temps.

La classe donnée ci-dessus est une sous-classe de Fragment valide, à l'exception de ces lignes:

 s[0] = MediaPlayer.create(MyFragment.this, R.raw.burp); 
     s[1] = MediaPlayer.create(MyFragment.this, R.raw.robert); 
     s[2] = MediaPlayer.create(MyFragment.this, R.raw.burp2); 

Remplacer "MyFragment.this" avec "MyFragment.getActivity()".

Maintenant, vous pouvez remplacer "étend AppCompatActivity, Fragment" avec "étend Fragment"

Maintenant vous avez un fragment valide.

Créez vous-même AppCompatActivity. Recherchez comment vous pouvez ajouter un fragment à une activité.

Comme une pointe dans la pratique de bonne programmation, je suggère que vous déplacez le code suivant dans onCreateView() à onActivityCreated():

 img = (ImageButton) rootView.findViewById(R.id.img); 

     s[0] = MediaPlayer.create(MyFragment.this, R.raw.burp); 
     s[1] = MediaPlayer.create(MyFragment.this, R.raw.robert); 
     s[2] = MediaPlayer.create(MyFragment.this, R.raw.burp2); 



    img.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      for (int i = 0; i < 1; i++) { 
       Random r = new Random(); 
       n = r.nextInt(3); 

       s[n].start(); 
      } 
     } 
    }); 

changement

 img = (ImageButton) rootView.findViewById(R.id.img); 

à

 img = (ImageButton) getView().findViewById(R.id.img);