-1

Hallo Ich versuche einzurichten, so habe ich eine Listenansicht auf einem Fragment in meiner Anwendung dargestellt, wenn ich versuche, die App mit meinem laufen zu lassen, wird es auf einem Fragment abstürzen, aber wenn es ist auf einer Haupttätigkeit wird es arbeiten. Ich habe mich gefragt, ob jemand könnte mir sagen, was ich das letzte Stück von Code geändert werden müssen, um sie auf ein Fragment arbeitenEinstellung Listview Adapter auf Fragment

Der folgende Code meiner Haupttätigkeit und seine XML darstellt, die, wie es funktioniert sollte

public class MainActivity extends AppCompatActivity { 

List <Wine> lstWine; 



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

    createData(); 

    ListView lvWine = (ListView)this.findViewById(R.id.lvWines); 

    WineAdapter adapter = new WineAdapter(this, R.layout.custom_listview, lstWine); 
    lvWine.setAdapter(adapter); 




} 


public void createData(){ 

    lstWine = new ArrayList<Wine>(); 

    lstWine.add(new Wine(R.drawable.blush, "Blushshs", "Random", "MONEY")); 
    lstWine.add(new Wine(R.drawable.blush, "Blush", "Random", "String")); 
    lstWine.add(new Wine(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine(R.drawable.blush, "Blush", "fffffffffffffffffffffff", "Random")); 
    lstWine.add(new Wine(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine(R.drawable.blush, "Blush", "fffffffffffffffff", "Random")); 
    lstWine.add(new Wine(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine(R.drawable.blush, "Blush", "YEAR", "Random")); 






} 

Der Code oben habe ich versucht, oben zu konvertieren, dass ich es eine ListView innerhalb eines Fragments anwenden könnte.

public class winelistfragment extends Fragment { 

List<Wine_String> lstWine; 
Inflater inflate; 

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

    wineListData(); 

    ListView lvWine = (ListView)getActivity().findViewById(R.id.testlistview); 

    WineAdapter adapter = new WineAdapter(getActivity(), R.layout.custom_winelist, lstWine); 
    lvWine.setAdapter(adapter); 



} 

public void wineListData(){ 

    lstWine = new ArrayList<Wine_String>(); 

    lstWine.add(new Wine_String(R.drawable.blush, "Blushshs", "Random", "MONEY")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "Random", "String")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "fffffffffffffffffffffff", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "fffffffffffffffff", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 



} 

@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.fragment_wine, container, false); 

Können Sie mir sagen, was ich falsch mache und wie Fragment-Code ändern?

+0

post bitte die Logcat des Absturzes bitte. – Vucko

+0

Erstellen Sie ein minimales, vollständiges und überprüfbares Beispiel. Siehe: http://stackoverflow.com/help/how-to-ask –

Antwort

0

Ihr Code sollte eine Nullzeigerausnahme auslösen, weil Sie versuchen, die Ansichts-ID für Ihre ListView (R.id.testlistview) in der onCreate() - Methode Ihres Fragments abzurufen. Dies liegt daran, dass die onCreate() -Methode vor der onCreateView() -Methode Ihres Fragments aufgerufen wird, an der Sie Ihre Ansichten aufblasen sollten. Da die Ansicht an dem Punkt, an dem Sie Ihr Fragment erstellen, noch nicht existiert, endet der Absturz. Sie extrahieren das Element korrekt, nachdem die Ansicht in der Aktivität festgelegt wurde, aber Sie müssen den Code im Fragment ändern.

Im Grunde müssen Sie Ihre Ansicht in der onCreateView() - Methode im Fragment aufblähen, ohne die Sie keine Ansicht haben (derzeit Ihr Fall). Sobald dies erledigt ist, können Sie das Ansichtselement in der onViewCreated() - Methode Ihres Fragments extrahieren und dann die Werte festlegen. Für weitere Informationen zum Lebenszyklus von Fragmenten empfehle ich den folgenden Link http://developer.android.com/guide/components/fragments.html. Der Link zeigt Ihnen, wie Sie Ihre Ansichten instanziieren und dann extrahieren können.

0

Ok, was ich gemacht habe, wurde ein Listenfragment erstellt und dann dieses Listenfragment zum XML der fraglichen Seite hinzugefügt, die ich benötigte.

public class List extends ListFragment { 

java.util.List<Wine_String> lstWine; 

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



    wineListData(); 



    WineAdapter adapter = new WineAdapter(getActivity(), R.layout.custom_winelist, lstWine); 
    setListAdapter(adapter); 

    return super.onCreateView(inflater, container, savedInstanceState); 
} 


public void wineListData() { 

    lstWine = new ArrayList<Wine_String>(); 

    lstWine.add(new Wine_String(R.drawable.blush, "Blushshs", "Random", "MONEY")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "Random", "String")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "fffffffffffffffffffffff", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "fffffffffffffffff", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 
    lstWine.add(new Wine_String(R.drawable.blush, "Blush", "YEAR", "Random")); 



} 
} 
Verwandte Themen