2017-02-09 25 views
0

で活動を開始します。は内部クラス以外の静的

そのクラスには、私はフラグメントとコンテナを宣言しました。

静的メソッドを使用して、Manifestを宣言してContainerクラスを開始することはできません。

しかし、 "非静的"を使用すると、コンテナが開きません - "アクティビティをインスタンス化できません... CustomClass $ Containerにゼロ引数コンストラクタがありません"というエラーが返されます。

私は、静的でない内部クラスによってアクティビティ(コンテナ - フラグメント)を開始する必要があると考えます。しかし、私はどのように知りません。

私は何ができますか? TKSのヘルプ。

カスタムクラス:

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

クラス聖霊降臨祭のArrayListやメソッドの呼び出し元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); 
      } 
     }); 
    } 
} 

とマニフェスト:

<?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> 

まあ、TKS!

答えて

0

ここでは本当に変わった設定があります。アクティビティは内部クラスであってはなりません。トップレベルのクラスで、アクティビティの表示/実行に必要な他のクラスを所有している必要があります。階層全体が逆転しています。あなたの断片は何かのサブクラスであってはなりません。私はあなたがこの設定をどこに持っているのか分かりませんが、ちょっと間違っています。

+0

これは実際には標準外です。 私はそれを動作させようとしましたが、それは可能ではないようです。 おかげでガベ・セチャン。 –

関連する問題