Autore Topic: ListView in Fragment  (Letto 399 volte)

Offline traficante.donato

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    sansung s3
  • Sistema operativo:
    Windows
ListView in Fragment
« il: 01 Dicembre 2016, 10:14:02 CET »
0
Salve a tutti

sto cercando di caricare un ListView in un Fragment, ma non riesco.

Codice (Java): [Seleziona]
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.ListView;
 
public class Tab1Fragment extends Fragment {
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                        Bundle savedInstanceState) {
                               
               
                View view = inflater.inflate(R.layout.tab1, container, false);
               
                String[] citta=new String[]{"Torino","Roma","Milano","Napoli","Firenze"};
            ArrayAdapter<String> adapter=new ArrayAdapter<String>(getActivity().getApplicationContext(), R.layout.row, R.id.textView1, citta);
           
            /*
            ListView listView = (ListView) getView().findViewById(R.id.listview);              
            listView.setAdapter(adapter);
            listView.setTextFilterEnabled(true);
            */

           
                return view;
        }
 
       
       
        public void onActivityCreated(Bundle savedInstanceState) {
                  super.onActivityCreated(savedInstanceState);
                 
                  //displayListView();
                   
                 }
}

Il codice commentato è quello che mi da errore.

Il log mi restituisce questi errori:
Codice: [Seleziona]
12-01 10:12:47.726: E/AndroidRuntime(13834): FATAL EXCEPTION: main
12-01 10:12:47.726: E/AndroidRuntime(13834): Process: com.example.atella, PID: 13834
12-01 10:12:47.726: E/AndroidRuntime(13834): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.atella/com.example.atella.Carta}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.ActivityThread.access$1100(ActivityThread.java:229)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.os.Handler.dispatchMessage(Handler.java:102)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.os.Looper.loop(Looper.java:148)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.ActivityThread.main(ActivityThread.java:7331)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at java.lang.reflect.Method.invoke(Native Method)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
12-01 10:12:47.726: E/AndroidRuntime(13834): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
12-01 10:12:47.726: E/AndroidRuntime(13834):         at com.example.atella.Tab1Fragment.onCreateView(Tab1Fragment.java:25)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.Fragment.performCreateView(Fragment.java:2281)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:984)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1164)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.BackStackRecord.run(BackStackRecord.java:793)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1557)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.FragmentController.execPendingActions(FragmentController.java:326)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.Activity.performStart(Activity.java:6942)
12-01 10:12:47.726: E/AndroidRuntime(13834):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3276)
12-01 10:12:47.726: E/AndroidRuntime(13834):         ... 9 more

Devo sto sbagliando ?

Grazie in anticipo

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:ListView in Fragment
« Risposta #1 il: 01 Dicembre 2016, 10:36:13 CET »
0
Sostituisci

Codice (Java): [Seleziona]
ListView listView = (ListView) getView().findViewById(R.id.listview);
con

Codice (Java): [Seleziona]
ListView listView = (ListView)view.findViewById(R.id.listview);
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline traficante.donato

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    sansung s3
  • Sistema operativo:
    Windows
Re:ListView in Fragment
« Risposta #2 il: 01 Dicembre 2016, 12:44:48 CET »
0
Purtroppo ancora non va   :'(

il log mi dice:
Codice: [Seleziona]
12-01 12:41:09.913: E/AndroidRuntime(21616): FATAL EXCEPTION: main
12-01 12:41:09.913: E/AndroidRuntime(21616): Process: com.example.atella, PID: 21616
12-01 12:41:09.913: E/AndroidRuntime(21616): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.atella/com.example.atella.Carta}: android.view.InflateException: Binary XML file line #6: Binary XML file line #6: Error inflating class fragment
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3415)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.ActivityThread.access$1100(ActivityThread.java:229)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1821)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.os.Handler.dispatchMessage(Handler.java:102)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.os.Looper.loop(Looper.java:148)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.ActivityThread.main(ActivityThread.java:7331)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at java.lang.reflect.Method.invoke(Native Method)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
12-01 12:41:09.913: E/AndroidRuntime(21616): Caused by: android.view.InflateException: Binary XML file line #6: Binary XML file line #6: Error inflating class fragment
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.view.LayoutInflater.inflate(LayoutInflater.java:551)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.view.LayoutInflater.inflate(LayoutInflater.java:429)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.view.LayoutInflater.inflate(LayoutInflater.java:380)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:487)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.Activity.setContentView(Activity.java:2400)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at com.example.atella.Carta.onCreate(Carta.java:19)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.Activity.performCreate(Activity.java:6904)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1136)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3266)
12-01 12:41:09.913: E/AndroidRuntime(21616):         ... 9 more
12-01 12:41:09.913: E/AndroidRuntime(21616): Caused by: android.view.InflateException: Binary XML file line #6: Error inflating class fragment
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:794)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:716)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.view.LayoutInflater.rInflate(LayoutInflater.java:847)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:810)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.view.LayoutInflater.inflate(LayoutInflater.java:527)
12-01 12:41:09.913: E/AndroidRuntime(21616):         ... 17 more
12-01 12:41:09.913: E/AndroidRuntime(21616): Caused by: java.lang.IllegalArgumentException: Binary XML file line #6: Must specify unique android:id, android:tag, or have a parent with an id for com.marcoduff.fragmentcommunication.fragment.MyListFragment
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2194)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.FragmentController.onCreateView(FragmentController.java:99)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.app.Activity.onCreateView(Activity.java:6085)
12-01 12:41:09.913: E/AndroidRuntime(21616):         at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:766)
12-01 12:41:09.913: E/AndroidRuntime(21616):         ... 21 more

credo di avere incasinato i layout

row.xml
Codice: [Seleziona]
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"/>

tab1.xml
Codice: [Seleziona]
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
     android:id="@+id/listview"
     android:layout_width="match_parent"
     android:layout_height="match_parent"/>

mentre il layout contenitore è il senguente
Codice: [Seleziona]
<RelativeLayout 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"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.example.atella.Plastica" >
</RelativeLayout>


Grazie
« Ultima modifica: 01 Dicembre 2016, 12:50:50 CET da traficante.donato »

Offline Ohmnibus

  • Utente senior
  • ****
  • Post: 580
  • Respect: +130
    • Google+
    • @ohmnibus
    • Mostra profilo
    • Lords of Knowledge GdR
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    Ohmnibus
  • Sistema operativo:
    Windows 7 x64
Re:ListView in Fragment
« Risposta #3 il: 01 Dicembre 2016, 13:06:02 CET »
0
Non mi è chiaro, ma stando all'eccezione credo che l'errore sia in un XML di layout che non ha incluso.

Alla riga 6 hai incluso un fragment definendone il namespace, ma non hai indicato né ID univoco né TAG.
Ohmnibus
Le mie app su Play Store

È stata trovata una soluzione al tuo problema? Evidenzia il post più utile premendo . È un ottimo modo per ringraziare chi ti ha aiutato.

Offline traficante.donato

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    sansung s3
  • Sistema operativo:
    Windows
Re:ListView in Fragment
« Risposta #4 il: 01 Dicembre 2016, 19:01:38 CET »
0
Adesso il problema è che non riconosce R.id.listview

Log
Codice: [Seleziona]
12-01 18:55:45.563: E/AndroidRuntime(25210): FATAL EXCEPTION: main
12-01 18:55:45.563: E/AndroidRuntime(25210): Process: com.example.atella, PID: 25210
12-01 18:55:45.563: E/AndroidRuntime(25210): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.atella/com.example.atella.Carta}: java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.view.View.findViewById(int)' on a null object reference
12-01 18:55:45.563: E/AndroidRuntime(25210):         at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3319)

Questo è il file (Fragment)
Codice (Java): [Seleziona]
public class Tab1Fragment extends Fragment {
 
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                        Bundle savedInstanceState) {
               
               
                               
                String[] materiale=new String[]{"Plastica","Carta","Vetro","Alluminio",
                                                                                        "Indumenti","Farmaci","Raee","Oli","Pile"};
               
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(),
                                                                                                                        android.R.layout.simple_list_item_1, materiale);
               
                ListView listView = (ListView)getView().findViewById(R.id.listview);
                listView.setAdapter(adapter);
 
                return (LinearLayout) inflater.inflate(R.layout.tab1, container, false);
        }
 
}

e questo il file xml
Codice: [Seleziona]
    <ListView 
    android:id="@+id/listview"
    android:layout_width="match_parent"   
    android:layout_height="wrap_content" 
    android:layout_below="@+id/textList" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="15dp" /> 

 :'( :'(

Se creo un altra Activity con lo stesso codice funziona, mentre dentro al Fragment non va.
« Ultima modifica: 01 Dicembre 2016, 19:22:54 CET da traficante.donato »

Offline capitancooker

  • Utente junior
  • **
  • Post: 56
  • Marco
  • Respect: +3
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5, Asus Zenpad S 8.0
  • Sistema operativo:
    Mac OSX El Capitan
Re:ListView in Fragment
« Risposta #5 il: 01 Dicembre 2016, 19:39:27 CET »
0
hai ripetuto lo stesso errore iniziale usando getView invece di view che non hai valorizzato in questo frame, vedi laprima risposta di Ohmnibus
« Ultima modifica: 01 Dicembre 2016, 19:45:40 CET da capitancooker »
Se sbaglio, correggetemi.

Offline traficante.donato

  • Nuovo arrivato
  • *
  • Post: 11
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    sansung s3
  • Sistema operativo:
    Windows
Re:ListView in Fragment
« Risposta #6 il: 01 Dicembre 2016, 20:20:32 CET »
0
Finalmente ci sono riuscito, ma solo grazie a VOI

ecco il codice finale:

Codice: [Seleziona]
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                        Bundle savedInstanceState) {
               
                View V = inflater.inflate(R.layout.tab1, container, false);               
                String[] materiale=new String[]{"Plastica","Carta","Vetro","Alluminio",
                                                                                        "Indumenti","Farmaci","Raee","Oli","Pile"};
               
                ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(),
                                                                                                                        android.R.layout.simple_list_item_1, materiale);
               
                ListView listView = (ListView)V.findViewById(R.id.listview);
               
                listView.setAdapter(adapter);
 
                return V;
        }

Grazie ancora a tutti, posso andare a dormire  :D