Soru & Cevap

Fragment kullanımı sorunu

06.08.2014 - 01:57

Arkadaşlar size durumu açıklayayım.

uygulamam;   (main_activity.xml , main.java) , (fragment1.xml, fragment1.java), (fragment2.xml, fragment2.java)  dosyalarından oluşmakta.

uygulama sorunsuz çalışıp fragmentleri çağırma konusunda hiçbir sıkıntım yok. Benim problemim fragmentleri activity lerde yaptığım kodlamalar ile kullanamıyorum. Tasarımları tamamladım. görsel olarak fragmentlerde 1 imageView ve 1 textView 3 adet button bulunmakta. fragment java dosyalarını fragment sınıfından extend ettiğim için daha önce hazırlamış olduğum uygulama içinde çalışan kodlarım fragmentlerde çalışmamakta fragment javada (setContentView) ve (FindByViewId) hata vermekte.  Araştırdığım ve anladığım kadarıyla bunu düzeltmek için bazı kodlar girmem ve bazı kodları düzenlemem gerekecek fakat çözüm bulamadım.

 

 

Aşağıda çalışan java dosyası kodları var. burada oluşturulan kodları fargment java içinde kullanmak istiyorum.

[code]

public class main extends ActionBarActivity {

 

 

 

    int rNumber = 0;

    View.OnClickListener NextQuote;

    final String[] yazilimliste ={"deneme1","deneme2", "deneme3 ", "deneme4","deneme5","deneme6"

            };

@Override

protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

   

final ImageButton RandomQuote = (ImageButton)findViewById(R.id.random);

final  ImageButton next = (ImageButton)findViewById(R.id.next);

final ImageButton BackQuote = (ImageButton)findViewById(R.id.back);

final TextView display = (TextView) findViewById(R.id.textView1);

        display.setMovementMethod(new ScrollingMovementMethod());

        Random numGen = new Random();

        rNumber = numGen.nextInt(6);

        display.setText(yazilimliste[rNumber]);

        System.out.println(yazilimliste.length);

        rNumber=rNumber+1;

        NextQuote = new View.OnClickListener(){

 

public void onClick(View v)

        {

        if (rNumber  > 5)

        {

        rNumber=0;

        display.setText(yazilimliste[rNumber]);

        }

        display.setText(yazilimliste[rNumber]);

        rNumber=rNumber+1;

        }

        };

        next.setOnClickListener(NextQuote);

        BackQuote.setOnClickListener(new View.OnClickListener() {

public void onClick(View v) {

        rNumber=rNumber-2;

        if (rNumber  < 0)

        {

        rNumber=5;

        display.setText(yazilimliste[rNumber]);

        }

        display.setText(yazilimliste[rNumber]);

        rNumber=rNumber+1;

        }

        });

        RandomQuote.setOnClickListener(new     View.OnClickListener()

        {

public void onClick(View v) {

        Random numGen = new Random();

        rNumber = numGen.nextInt(6);

        display.setText(yazilimliste[rNumber]);

        rNumber=rNumber+1;

        }

        });

        }

        }

[/code]

 

 

 

321 Görüntülenme

4 Cevap

Sitedeki sorulara cevap verebilmek için giriş yapın ya da üye olun.

picture-12293-1418042344.png
irfanyucel
07.08.2014 - 12:03

kodun tamamı 

 

[code]


import android.app.Fragment;
import android.os.Bundle;
import android.text.method.ScrollingMovementMethod;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;

import java.util.Random;

public class AnnelerFragment extends Fragment {

    public AnnelerFragment(){}


    int rNumber = 0;

    View.OnClickListener NextQuote;

    final String[] liste1 ={"denemeyazı1","denemeyazı2","denemeyazı3","denemeyazı4"

    };

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {


        View view = inflater.inflate(R.layout.fragment_anneler, container, false);

 

        final ImageButton RandomQuote = (ImageButton)view.findViewById(R.id.random);


        final ImageButton next = (ImageButton)view.findViewById(R.id.next);


        final ImageButton BackQuote = (ImageButton)view.findViewById(R.id.back);


        final TextView display = (TextView)view.findViewById(R.id.textView1);

        display.setMovementMethod(new ScrollingMovementMethod());

        Random numGen = new Random();

        rNumber = numGen.nextInt(4);

        display.setText(liste1[rNumber]);

        System.out.println(liste1.length);

        rNumber=rNumber+1;

        NextQuote = new View.OnClickListener(){

 

            public void onClick(View v)

            {

                if (rNumber  > 3)

                {

                    rNumber=0;

                    display.setText(liste1[rNumber]);

                }

                display.setText(liste1[rNumber]);

                rNumber=rNumber+1;

            }

        };

        next.setOnClickListener(NextQuote);

        BackQuote.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {

                rNumber=rNumber-2;

                if (rNumber  < 0)

                {

                    rNumber=4;

                    display.setText(liste1[rNumber]);

                }

                display.setText(liste1[rNumber]);

                rNumber=rNumber+1;

            }

        });

        RandomQuote.setOnClickListener(new     View.OnClickListener()

        {

            public void onClick(View v) {

                Random numGen = new Random();

                rNumber = numGen.nextInt(4);

                display.setText(liste1[rNumber]);

                rNumber=rNumber+1;

            }

        });

 

 


        View rootView = inflater.inflate(R.layout.fragment_anneler, container, false);

        return rootView;
    }
}

[/code]

Ulaş Sancak
07.08.2014 - 12:28
Hata şurda. Yukarıda zaten view oluşturmuşsunuz inflater ile. Aşağıda yeni baştan oluşturup onu döndürmüşsünüz. Yukarıda yaptıklarınızın hiç bir işlevi olmamış. Yukarıda yer alan view objesini döndürmeniz yetecek. return view;
İrfan Yücel ÜZÜM
07.08.2014 - 01:08
sağol hocam sorunu hallettim. kod çalışıyor. View rootView = inflater.inflate(R.layout.fragment_anneler, container, false); silip.... return rootView;ise return view; şeklin de düzenledim
Ulaş Sancak
07.08.2014 - 01:17
Rica ederim.
picture-2335-1379625106.jpg
rocxteady
06.08.2014 - 02:16

Fragment'lerde görsel objelerin kodlanması activity'deki gibi değildir.

 

Örnek bir fragment:

[code]public static class Fragment1 extends Fragment {     

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.fragment1, container, false); 

    
final ImageButton RandomQuote = (ImageButton)view.findViewById(R.id.random);

final ImageButton next = (ImageButton)view.findViewById(R.id.next);

final ImageButton BackQuote = (ImageButton)view.findViewById(R.id.back);

//kodun geri kalanı

return view;

   } }[/code]

 

 

İrfan Yücel ÜZÜM
06.08.2014 - 11:34
hocam kod çalışıp hata vermeden tasarıma ulaştım fakat hazırladığım dizi ve butonlar işlevsiz. butona tıkladığımda diziden bir metinin textview ile görünmesi gerekiyor. şu fragment işini bir anlasam sorunlarım çözülecek ama.
Ulaş Sancak
06.08.2014 - 11:39
Kodunu paylaş. Fragment'te nasıl yazdın kodları. OnClickListenerlar falan doğru kodlandı mı falan görelim.
İrfan Yücel ÜZÜM
06.08.2014 - 02:23
hocam teşekkürler şimdi daha net anladım. kodları düzenleyerek sonuçtan haber vereeğim.
Ulaş Sancak
06.08.2014 - 02:26
Fragmentleri doğru çağırıyorsan ve bu görsel objeler bu fragmentlerin içerisindeyse çalışması gerekir. Problem çıkarsa haber eyle. Rica ederim.
picture-12293-1418042344.png
irfanyucel
06.08.2014 - 02:08

Bu dediğinizden anladığım

[code]
final ImageButton next = (ImageButton)getActivity().findViewById(R.id.next)
[/code]

şeklinde bir düzenleme ile sorunum çözülecektir. doğrumu anlamışım. Cevabınız için teşekkürler.

Ahmet Burak Demirkoparan
06.08.2014 - 02:41
activitynin referansını felan dialogda vs kullanacağın zaman getActivity() i kullanacaksın.Context istenen yerlerde vs kısaca.
picture-1372-1408467635.jpg
ahmtbrk
06.08.2014 - 02:04
Fragmentler bi activity üzerinde kosarlar findViewById vs activity e ait methodlardir, Herhangi bir fragmentten ustunde kostugu fragmente ulasmak istersen getActivity(); methoduyla erisebilirsin. getActivity().findViewById gibi