Autore Topic: Utilizzare this.findViewById in Fragments  (Letto 383 volte)

Offline DenisProjects

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    NGM
  • Play Store ID:
    DenisProjects
  • Sistema operativo:
    Windows
Utilizzare this.findViewById in Fragments
« il: 06 Gennaio 2015, 13:03:47 CET »
0
Ciao ragazzi, ho bisogno di utilizzare NomeClass.this.findViewById(R.id.questo); con fragments, ma non so come fare, ho provato con .getActivity e con .getView ma crasha. Come potrei fare? Chi mi puo' aiutare ?

adView = (AdView)NameClass.this.findViewById(R.id.adView);
« Ultima modifica: 06 Gennaio 2015, 13:07:59 CET da DenisProjects »

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Utilizzare this.findViewById in Fragments
« Risposta #1 il: 06 Gennaio 2015, 13:11:41 CET »
0
Cosa dice il log del crash?

Inviato dal mio Nexus 4 utilizzando Tapatalk

IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline DenisProjects

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    NGM
  • Play Store ID:
    DenisProjects
  • Sistema operativo:
    Windows
Re:Utilizzare this.findViewById in Fragments
« Risposta #2 il: 06 Gennaio 2015, 13:14:22 CET »
0
01-06 13:13:41.983: E/AndroidRuntime(6206): java.lang.NullPointerException
01-06 13:13:41.983: E/AndroidRuntime(6206):    at com.denisprojects.maneletube1.Claudia.onCreateView(Claudia.java:37)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.support.v4.app.Fragment.performCreateView(Fragment.java:1504)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:942)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1121)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1484)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:482)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.support.v4.view.ViewPager.populate(ViewPager.java:1073)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.support.v4.view.ViewPager.populate(ViewPager.java:919)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.support.v4.view.ViewPager$3.run(ViewPager.java:249)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:776)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.view.Choreographer.doCallbacks(Choreographer.java:579)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.view.Choreographer.doFrame(Choreographer.java:547)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:762)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.os.Handler.handleCallback(Handler.java:800)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.os.Handler.dispatchMessage(Handler.java:100)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.os.Looper.loop(Looper.java:194)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at android.app.ActivityThread.main(ActivityThread.java:5409)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at java.lang.reflect.Method.invokeNative(Native Method)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at java.lang.reflect.Method.invoke(Method.java:525)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:606)
01-06 13:13:41.983: E/AndroidRuntime(6206):    at dalvik.system.NativeStart.main(Native Method)

Offline Nicola_D

  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Utilizzare this.findViewById in Fragments
« Risposta #3 il: 06 Gennaio 2015, 13:16:05 CET »
0
Stai facendo la ricerca prima che venga creata la view mi pare di vedere... Fai override del metodo onViewCreated

Inviato dal mio Nexus 4 utilizzando Tapatalk

IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline DenisProjects

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    NGM
  • Play Store ID:
    DenisProjects
  • Sistema operativo:
    Windows
Re:Utilizzare this.findViewById in Fragments
« Risposta #4 il: 06 Gennaio 2015, 13:32:46 CET »
0
Ho fatto Override prima del onCreateView, ma lo stesso errore.

Qui sotto c'e il codice.

Codice (Java): [Seleziona]
 public View onCreateView(LayoutInflater inflater, ViewGroup container,
                    Bundle savedInstanceState) {
         
                View v = inflater.inflate(R.layout.lista, container, false);
        list = (ListView) v.findViewById(R.id.listView1);
        //
       
        adView = (AdView)Claudia.this.getView().findViewById(R.id.adView);
        final MusicClaudia music = new MusicClaudia();
//3

         ArrayAdapter<Pref> adapter = getViewAdapter(getActivity(), list,music.getPrefList());
        //4
        list.setAdapter(adapter);
        AdRequest adRequest = new AdRequest.Builder().build();
    adView.loadAd(adRequest);
    adView.setAdListener(new AdListener() {
         public void onAdLoaded() {
                 adView.setVisibility(View.VISIBLE);
         }
    });
        //5
        list.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view,int position, long id) {
                       
                        String url = music.getPrefList().get(position).getUrl();
                        Intent link= new Intent(Intent.ACTION_VIEW);
                        link.setData(Uri.parse(url));
                        startActivity(link);
               
               
                       
                }
        });
        return v;
       

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Utilizzare this.findViewById in Fragments
« Risposta #5 il: 06 Gennaio 2015, 16:50:27 CET »
0
Non puoi fare questo nel OnCreateView:
Codice (Java): [Seleziona]
adView = (AdView)Claudia.this.getView().findViewById(R.id.adView);
Puoi invece fare (se la view è contenuta nel layout).
Codice (Java): [Seleziona]
v.findViewById(R.id.adView);
Oppure puoi spostare questa riga nel metodo onActivityCreated();