2017-02-09 2 views
0

si vous pouvez me aider:Initié activité par classe interne non statique

Je créé une classe personnalisée pour définir les paramètres d'un ArrayList.

Dans cette classe, j'ai déclaré Fragments et Container.

Je ne peux pas utiliser la méthode statique pour déclarer sur le manifeste que la classe Container doit être lancée. Mais, si j'utilise "non static", le conteneur n'ouvre pas - renvoie l'erreur "Impossible d'instancier l'activité ... CustomClass $ Container n'a pas de constructeur d'argument zéro". Pensez que j'ai besoin d'initier l'activité (Conteneur -Fragments) par une classe interne non statique. Mais, je ne sais pas comment.

Que puis-je faire? Tks pour l'aide.

La classe personnalisée:

package com.example.android.guiaturistico; 

import android.annotation.SuppressLint; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentPagerAdapter; 
import android.support.v4.view.ViewPager; 
import android.support.v7.app.AppCompatActivity; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class CustomClass { 

private int mImage; 

private String mName; 

private String mLocalization; 

private int mFragmentI; 

private int mFragmentII; 

private int mFragmentIII; 

public CustomClass (int image, String name, String localization, int fragmentI, int fragmentII, int fragmentIII){ 
    mImage = image; 
    mName = name; 
    mLocalization = localization; 
    mFragmentI = fragmentI; 
    mFragmentII = fragmentII; 
    mFragmentIII = fragmentIII; 
} 

public int getImage() { 
    return mImage; 
} 

public void setImage(int mImage) { 
    this.mImage = mImage; 
} 

public String getName() { 
    return mName; 
} 

public void setName(String mName) { 
    this.mName = mName; 
} 

public String getLocalization() { 
    return mLocalization; 
} 

public void setLocalization(String mLocalization) { 
    this.mLocalization = mLocalization; 
} 

public int getFragmentI() { 
    return mFragmentI; 
} 

public void setFragmentI(int mFragmentI) { 
    this.mFragmentI = mFragmentI; 
} 

public int getFragmentII() { 
    return mFragmentII; 
} 

public void setFragmentII(int mFragmentII) { 
    this.mFragmentII = mFragmentII; 
} 

public int getFragmentIII() { 
    return mFragmentIII; 
} 

public void setFragmentIII(int mFragmentIII) { 
    this.mFragmentIII = mFragmentIII; 
} 

@Override 
public String toString() { 
    return "Nome do local: " + mName + ".\n" + 
      "Endereço do local: " + mLocalization + "."; 
} 

@SuppressLint("ValidFragment") 
public class FragmentInflaterI extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(getFragmentI(), container, false); 
    } 
} 

@SuppressLint("ValidFragment") 
public class FragmentInflaterII extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(getFragmentII(), container, false); 
    } 
} 

@SuppressLint("ValidFragment") 
public class FragmentInflaterIII extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     return inflater.inflate(getFragmentIII(), container, false); 
    } 
} 

public class Fragments extends FragmentPagerAdapter { 

    public Fragments (android.support.v4.app.FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int position) { 
     if (position == 0) { 
      return new FragmentInflaterI(); 
     } else if (position == 1){ 
      return new FragmentInflaterII(); 
     } else { 
      return new FragmentInflaterIII(); 
     } 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 
} 

public class Container extends AppCompatActivity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.layout_container); 
     ViewPager viewPager = (ViewPager) findViewById(R.id.layout_container); 
     CustomClass.Fragments adapter = new CustomClass.Fragments(getSupportFragmentManager()); 
     viewPager.setAdapter(adapter); 
    } 
} 
} 

La classe Whit appelant ArrayList et méthode onItemClick:

package com.example.android.guiaturistico; 

import android.content.Intent; 
import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ListView; 

import java.util.ArrayList; 

public class Hoteis extends AppCompatActivity { 

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

     final ArrayList <CustomClass> lista = new ArrayList<>(); 
     CustomClass hoteis = new CustomClass(0, "", "", 0, 0, 0); 
     hoteis.setImage(R.mipmap.ic_hotel_white_48dp); 
     hoteis.setName(getString(R.string.name_hotel)); 
     hoteis.setLocalization(getString(R.string.local_hotel)); 
     hoteis.setFragmentI(R.layout.fragment_hotel1_perfil); 
     hoteis.setFragmentII(R.layout.fragment_hotel1_preco); 
     hoteis.setFragmentIII(R.layout.fragment_hotel1_contato); 
     lista.add(hoteis); 

     CustomClass hoteis2 = new CustomClass(0, "", "", 0, 0, 0); 
     hoteis2.setImage(R.mipmap.ic_hotel_white_48dp); 
     hoteis2.setName(getString(R.string.name_hotel2)); 
     hoteis2.setLocalization(getString(R.string.local_hotel2)); 
     hoteis2.setFragmentI(R.layout.fragment_hotel2_perfil); 
     hoteis2.setFragmentII(R.layout.fragment_hotel2_preco); 
     hoteis2.setFragmentIII(R.layout.fragment_hotel2_contato); 
     lista.add(hoteis2); 

     CustomClassAdapter itemAdapter = new CustomClassAdapter(this, lista); 

     ListView listView = (ListView)findViewById(R.id.lista_hoteis); 

     listView.setAdapter(itemAdapter); 

     listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { 
       Intent openFragment = new Intent(getApplicationContext(), CustomClass.Container.class); 
       startActivity(openFragment); 
      } 
     }); 
    } 
} 

Et le Manifest:

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.android.guiaturistico"> 

    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 
     <activity android:name=".Hoteis" 
      android:label="@string/app_name_hoteis" 
      android:parentActivityName=".MainActivity" 
      /> 
     <activity android:name=".CustomClass$Container" 
      android:label="@string/app_name" 
      android:parentActivityName=".CustomClass$Container" 
      /> 
    </application> 

</manifest> 

Eh bien, TKS!

Répondre

0

Vous venez d'avoir une configuration vraiment bizarre ici. L'activité ne devrait pas être une classe interne. Il devrait s'agir d'une classe de niveau supérieur et posséder toutes les autres classes nécessaires pour afficher/exécuter l'activité. Vous avez toute votre hiérarchie inversée. Vos fragments ne devraient pas être une sous-classe de quoi que ce soit non plus. Je ne sais pas où vous avez eu cette configuration, mais c'est juste faux.

+0

Il est vraiment hors normes. J'ai essayé de le faire fonctionner, mais il semble que ce ne soit même pas possible. Merci Gabe Sechan. –