SORU
1 Mart 2011, Salı


Nasıl bir program aracılığıyla oluşturulan içerik manzaralı bir Aktivite için bir Parça eklerim

Onun düzeni programlı olarak uygulayan bir Etkinlik için bir Parça eklemek istiyorum. Parça belgelerine baktım ama pek çok örnek istiyorum ne açıklayan yok. Burada yazmaya çalıştım kod türü:

public class DebugExampleTwo extends Activity {

    private ExampleTwoFragment mFragment;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FrameLayout frame = new FrameLayout(this);
        if (savedInstanceState == null) {
            mFragment = new ExampleTwoFragment();
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.add(frame.getId(), mFragment).commit();
        }

        setContentView(frame);
    }
}

...

public class ExampleTwoFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, 
                             ViewGroup container, 
                             Bundle savedInstanceState) {
        Button button = new Button(getActivity());
        button.setText("Hello There");
        return button;
    }
}

Bu kodu derler ama benim çünkü başlangıçta, FragmentTransaction.add() muhtemelen çöker yanlıştır. Bunu yapmak için doğru yolu nedir?

CEVAP
1 Mart 2011, Salı


Bu kod ile birden fazla sorun ortaya çıkıyor. Parçanın tamamı bu şekilde, aynı java içinde kamu iç bir sınıf aktivitesi olarak değil dosya bildirilmesi. Çerçeve parçanın yapıcı (herhangi bir parametre ile) halka açık ve görünür olmasını bekliyor. Bir iç sınıf olarak faaliyete parça hareket, ya da parça için yeni bir java dosyası oluşturma giderir.

İkinci sorunun bir parçası bu şekilde eklerken, parçanın içeren görüntülemek için bir referans geçmesi gereken, görünüm ve özel bir kimliği olmalıdır. Varsayılan kimlik kullanarak app kilitlenmesine. İşte güncelleştirilmiş kod:

public class DebugExampleTwo extends Activity {

    private static final int CONTENT_VIEW_ID = 10101010;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        FrameLayout frame = new FrameLayout(this);
        frame.setId(CONTENT_VIEW_ID);
        setContentView(frame, new LayoutParams(
            LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));

        if (savedInstanceState == null) {
            Fragment newFragment = new DebugExampleTwoFragment();
            FragmentTransaction ft = getFragmentManager().beginTransaction();
            ft.add(CONTENT_VIEW_ID, newFragment).commit();
        }
    }

    public static class DebugExampleTwoFragment extends Fragment {
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                Bundle savedInstanceState) {
            EditText v = new EditText(getActivity());
            v.setText("Hello Fragment!");
            return v;
        }
    }
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • DominicFear

    DominicFear

    30 Kasım 2006
  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • Jesse Pimenta

    Jesse Piment

    5 EKİM 2011