2014-09-03 53 views
0

我有一個片段類,它是viewpager中幾個其他類的一部分。我想創建一個ListView通過和陣列適配器,並顯示其中一個片段的列表視圖中的內容。這裏的問題是當我執行MyLogs.add(new actlog("String","String");程序崩潰時,但是當我添加刪除這行代碼的應用程序運行,但片段是空白的。這通常是我如何在活動類上設置並顯示我的ListView,但它對片段類不起作用。ListView沒有出現在片段類

片段類

package com.example.swipeview; 

import java.util.ArrayList; 
import java.util.List; 

import android.content.Context; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 

public class FragmentOne extends Fragment { 
Context context; 
public List<actlog> MyLogs = new ArrayList<actlog>(); 


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

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


MyLogs.add(new actlog("12:00 AM","")); 
MyLogs.add(new actlog("12:30 AM","")); 
MyLogs.add(new actlog("1:00 AM","")); 
MyLogs.add(new actlog("1:30 AM","")); 
MyLogs.add(new actlog("2:00 AM","")); 
MyLogs.add(new actlog("2:30 AM","")); 
MyLogs.add(new actlog("3:00 AM","")); 


ArrayAdapter<actlog> adapter = new MyListAdapter(); 

ListView list = (ListView) view.findViewById(R.id.fragmentonelistview); 
list.setAdapter(adapter); 

return view; 

} 



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


} 

public class MyListAdapter extends ArrayAdapter<actlog>{ 
public MyListAdapter(){ 
super(getActivity(),R.layout.item_view, MyLogs); 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent){ 

LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE); 
convertView = inflater.inflate(R.layout.item_view, parent, false); 

actlog currentlog = MyLogs.get(position); 
TextView textview = (TextView) convertView.findViewById(R.id.timeView); 
textview.setText(currentlog.getTime()); 

return convertView; 
} 

}//end of listadapter class 




}//end of class 

ACTLOG類

package com.example.swipeview; 

import java.io.Serializable; 

public class actlog implements Serializable{ 


public String time; 
public String log; 
public actlog(String time, String log) { 
    super(); 
    this.time = time; 
    this.setLog(log); 
} 

public String getTime(){ 
    return time; 
} 


public String getLog(){ 
    return log; 
} 

public void setLog(String log){ 
    this.log = log; 

} 


} 

logcat的

09-03 19:50:39.989: W/dalvikvm(1548): threadid=1: thread exiting with uncaught exception  (group=0xb1aa4ba8) 
09-03 19:50:40.019: E/AndroidRuntime(1548): FATAL EXCEPTION: main 
09-03 19:50:40.019: E/AndroidRuntime(1548): Process: com.example.swipeview, PID: 1548 
09-03 19:50:40.019: E/AndroidRuntime(1548):  java.lang.NullPointerException 
09-03 19:50:40.019: E/AndroidRuntime(1548):  at  com.example.swipeview.FragmentOne$MyListAdapter.getView (FragmentOne.java:63) 
09-03 19:50:40.019: E/AndroidRuntime(1548):  at android.widget.AbsListView.obtainView(AbsListView.java:2263) 
09-03 19:50:40.019:  E/AndroidRuntime(1548):  at android.widget.ListView.measureHeightOfChildren(ListView.java:1263) 
09-03 19:50:40.019: E/AndroidRuntime(1548):  at android.widget.ListView.onMeasure(ListView.java:1175) 
09-03 19:50:40.019: E/AndroidRuntime(1548):  at android.view.View.measure(View.java:16497) 
09-03 19:50:40.019: E/AndroidRuntime(1548): at android.widget.RelativeLayout.measureChild(RelativeLayout.java:689) 
09-03 19:50:40.019: E/AndroidRuntime(1548):   at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:473) 
09-03 19:50:40.019: E/AndroidRuntime(1548):  at android.view.View.measure(View.java:16497) 
09-03 19:50:40.019: E/AndroidRuntime(1548):  at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:5125) 
09-03 19:50:40.019: E/AndroidRuntime  
+2

我認爲你的代碼應該拋出NULLPointerException,因爲你的變量'context'在代碼 的任何地方都沒有初始化,否則你的代碼看起來很好。 – Subham 2014-09-03 23:33:13

+0

它拋出什麼異常?空指針異常?你可以發佈你的行爲日誌類嗎? – 2014-09-03 23:35:50

+0

可能。這可以解釋爲什麼當他不將項目添加到列表時,應用程序不會崩潰。 getView()方法永遠不會被調用,因爲它的數據是空的。 – 2014-09-03 23:39:57

回答

0

在適配器中的getView()做這樣的

LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        OR 
LayoutInflater inflater = LayoutInflater.from(getActivity()); 

或初始化像

public MyListAdapter(){ 
super(getActivity(),R.layout.item_view, MyLogs); 
Context context = getactivity(); 
} 

在適配器的構造背景變量我認爲這將解決您的問題。

+0

非常感謝您的工作 – TheRidlah 2014-09-04 02:23:56

+0

歡迎您。 – Subham 2014-09-04 02:44:21