2014-09-09 43 views
7

Android Uygulamaları'nda oldukça yeni yaşıyorum, bu yüzden burada biraz yardım bulabilirim. Zaten burada sorunumu aradım ve bir şey buldum, ancak bu işe yaramıyor.Android: Basit bir Fragman Eklemek

FrameLayout öğesine bir Fragman eklemek istiyorum, ancak çalışmaz. Amacım her zaman mevcut olan bir Çerçeve (/ Framework?) Oluşturmayı ve kullanıcı ile etkileşime girebiliyor ve bu Çerçeve içinde belirli bir "pencerede" gösterebiliyorum. Sayfaları/fragmanları görüntülemek istiyorum, toplamda beş, ve değiştirilebilen beeing sayfaları/parçaları herhangi bir zamanda, her zaman mevcut bir Çerçevem ​​var ve bu dinamik olarak değişen sayfaların içinde. (. Zaten btw çalışıyor) Ama şimdilik bu Frame için basit fragman ekleyerek başında şaşırıp

Bu umarım tüm ilgili kodudur: Hata MainActivity.java oluşur (. getSupportFragmentManager() beginTransaction() ekleyin (R.id.mainFrame, homeFragment) .commit();) bana söyler:.

Error:(25, 55) error: no suitable method found for add(int,HomeFragment) method FragmentTransaction.add(Fragment,String) is not applicable (argument mismatch; int cannot be converted to Fragment) method FragmentTransaction.add(int,Fragment) is not applicable (argument mismatch; HomeFragment cannot be converted to Fragment)

zaten Fragment homeFragment döküm çalıştı, ancak bu işe yaramadı .

MainActivity.java

import android.app.FragmentTransaction; 
import android.content.Intent; 
import android.os.Bundle; 
import android.support.v4.app.FragmentActivity; 


public class MainActivity extends FragmentActivity 
{ 
    FragmentTransaction fragmentTransaction; 
    HomeFragment homeFragment; 

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

     homeFragment = new HomeFragment(); 
     **getSupportFragmentManager().beginTransaction().add(R.id.mainFrame, homeFragment).commit();** 
} 

activity_main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity" 
    tools:ignore="MergeRootFrame" > 

    <FrameLayout 
     android:id = "@+id/mainFrame" 
     android:layout_width = "match_parent" 
     android:layout_height = "match_parent" 
     android:layout_marginBottom = "@dimen/bottom_Main_Tabs"> 
     </FrameLayout> 

    [...] 

</FrameLayout> 

fragment_home.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context="com.example.HomeFragment"> // it is not really com.example... 

    <!-- TODO: Update blank fragment layout --> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:text="@string/hello_blank_fragment" /> 

</FrameLayout> 

HomeFragment.java (herşey otomatik olarak oluşturulan edilir Henüz değil, ama zaten bir şey kesip)

public class HomeFragment extends Fragment 
{ 
    private OnFragmentInteractionListener mListener; 


    public static HomeFragment newInstance() 
    { 
     HomeFragment fragment = new HomeFragment(); 
     return fragment; // not really neccessary, because it Have shortened it 
    } 

    public HomeFragment() 
    { 
     // Required empty public constructor 
    } 

    @Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
    } 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) 
    { 
     // Inflate the layout for this fragment 
     return inflater.inflate(R.layout.fragment_home, container, false); 
    } 

    // TODO: Rename method, update argument and hook method into UI event 
    public void onButtonPressed(Uri uri) 
    { 
     if (mListener != null) 
     { 
      mListener.onFragmentInteraction(uri); 
     } 
    } 

    @Override 
    public void onAttach(Activity activity) 
    { 
     super.onAttach(activity); 
     try 
     { 
      mListener = (OnFragmentInteractionListener) activity; 
     } 
     catch (ClassCastException e) 
     { 
      throw new ClassCastException(activity.toString() 
        + " must implement OnFragmentInteractionListener"); 
     } 
    } 

    @Override 
    public void onDetach() 
    { 
     super.onDetach(); 
     mListener = null; 
    } 

    public interface OnFragmentInteractionListener 
    { 
     // TODO: Update argument type and name 
     public void onFragmentInteraction(Uri uri); 
    } 

} 

Birisi bana yardım edebilir mi?

John

+0

Yanıtlayıcı doğrudur, sorun, her Parçayla ilgili sınıfın destek kitaplığını kullanmamanızdır. – EpicPandaForce

cevap

18

support kütüphanesi ve sadece işletim sisteminin yeni sürümlerine uygun yeni sınıflardan sınıfları yukarı karıştırma ediyoruz.

Örneğin, Sen android.support.v4.app.FragmentTransaction içe ve HomeFragmentandroid.support.v4.app.Fragment değil android.app.Fragment uzanmasını sağlamak için gereken android.app.FragmentTransaction (11+ API için mevcuttur) ancak arama

... döner android.support.v4.app.FragmentTransactiongetSupportFragmentManager().beginTransaction() içe.

+1

İlk teşekkürler, derleyici bununla iyiydi. Ama eğer doğru anladıysam, bu kadar eski sürümler onunla çalışabilir. Benim minSDK daha yüksek, bu yüzden destek kütüphanesi olmadan yapmak istiyorum. Tam olarak ne yapmam gerekiyor? Ve uygulamayı çalıştırırsam, bu ileti şu kilitleniyor: java.lang.RuntimeException: Etkinlik başlatılamıyor ComponentInfo {com.example.app/com.example.app.MainActivity}: java.lang.ClassCastException: com .example.app.MainActivity @ b1d28ff0, OnFragmentInteractionListener – JRsz

+1

'u uygulamalıdır. Daha sonra, Etkinliğinizi FragmentActivity yerine Etkinleştir'i etkinleştirin (hala FraSment'lerle çalışabilirsiniz, ancak minSdk 11 veya daha fazlasına sahip olmanız şartıyla, FragmentActivity yalnızca yetenekleri vermek için Fragments'ı eski OS sürümleri ile kullanın), Fragmanınızın android.app.Fragmenti genişletmesi ve getSupportFragmentManager yerine Etkinliğinizde getFragmentManager'ı çağırmanız gerekir. – 2Dee

+0

Kural dışı durumla ilgili olarak, kodunuza bakın, bu sizin HomeFragment öğenizden, onFragmentInteraction yöntemini uygulamak için Parçayı ekleyen Etkinliği gerektirir. Sanırım kodları bir yerden kopyaladığınızdan/yapıştırdığınıza göre, kullandığınız kodla ilgili belge sayfasına bir bağlantı: http://developer.android.com/training/basics/fragments/communicating.html – 2Dee