-1

你好我正在嘗試設置,所以我有一個列表視圖表示在我的應用程序的片段當前,如果我嘗試運行該應用程序,它會崩潰,如果它的片段,但如果它的在一個主要的活動,它將工作。我想知道是否有人能告訴我什麼,我不得不改變我的代碼的最後一塊讓它在片段工作在片段上設置列表視圖適配器

下面的代碼代表我的主要活動及其XML這工作,因爲它應該

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")); 






} 

上面的代碼試圖將上面的代碼轉換爲我可以將其應用於片段內的列表視圖。

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); 

你能告訴我,我做錯了什麼,以及如何改變片段代碼?

+0

請張貼崩潰的logcat。 – Vucko

+0

請創建一個最小化,完整和可驗證的示例。請參閱:http://stackoverflow.com/help/how-to-ask –

回答

0

您的代碼應該拋出一個空指針異常,因爲您試圖在您的Fragment的onCreate()方法中檢索ListView(R.id.testlistview)的視圖ID。這是因爲onCreate()方法在你的片段的onCreateView()方法之前被調用,這是你應該膨脹視圖的地方。由於視圖在創建片段時尚未存在,因此最終會導致崩潰。在活動中設置視圖後,您正在正確提取元素,但您需要更改Fragment中的代碼。

基本上,你需要在Fragment中的onCreateView()方法中膨脹你的視圖,沒有它你將沒有視圖(目前你的情況)。完成此操作後,可以在Fragment的onViewCreated()方法中提取視圖元素,然後設置值。有關碎片生命週期的更多信息,我建議通過以下鏈接http://developer.android.com/guide/components/fragments.html。該鏈接顯示如何實例化視圖並提取它們。

0

好吧,所以我做了一個列表片段,然後將這個列表片段添加到我需要的片段頁面的xml中。

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")); 



} 
} 
相關問題