2016-06-13 32 views
0

我使用此代碼讀取碎片中的通話記錄使用列表視圖查看通話記錄當我使用陣列適配器添加值時,應用程序不幸停止,但沒有運行時間或編譯時間錯誤太 我該如何解決?在android碎片列表視圖中讀取通話記錄

public class TabFragment2 extends Fragment { 

    ArrayList<String> Calllist1 = new ArrayList<>(); 
    ListView callListView; 
    ArrayAdapter<String> arrayAdapter; 

    public View onCreateView(LayoutInflater inflater,ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.activity_call, container, false); 
     callListView = (ListView)view.findViewById(R.id.listView1); 
     arrayAdapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_2,Calllist1); 
     callListView.setAdapter(arrayAdapter); 
     getCallDetails(); 
     return view; 
    } 

    private void getCallDetails() { 

     String strOrder = CallLog.Calls.DATE + " DESC"; 
     Uri callUri = Uri.parse("content://call_log/calls"); 
     ContentResolver ca = getActivity().getContentResolver(); 
     Cursor managedCursor = getActivity().getContentResolver().query(callUri, null, null, null, strOrder); 
     int number = managedCursor.getColumnIndex(CallLog.Calls.NUMBER); 
     int type = managedCursor.getColumnIndex(CallLog.Calls.TYPE); 
     int date = managedCursor.getColumnIndex(CallLog.Calls.DATE); 
     int duration = managedCursor.getColumnIndex(CallLog.Calls.DURATION); 

     while (managedCursor.moveToNext()) { 
      String phNum = managedCursor.getString(number); 
      String callTypeCode = managedCursor.getString(type); 
      String strcallDate = managedCursor.getString(date); 
      Date callDate = new Date(Long.valueOf(strcallDate)); 
      String callDuration = managedCursor.getString(duration); 
      Calllist1.add(phNum); 
      Calllist1.add(callTypeCode); 
      Calllist1.add(strcallDate); 
      Calllist1.add(callDuration); 

      int callcode = Integer.parseInt(callTypeCode); 
      String callType; 
      switch (callcode) { 
       case CallLog.Calls.OUTGOING_TYPE: 
        callType = "Outgoing"; 
        break; 
       case CallLog.Calls.INCOMING_TYPE: 
        callType = "Incoming"; 
        break; 
       case CallLog.Calls.MISSED_TYPE: 
        callType = "Missed"; 
        break; 

      } 

     } 
     managedCursor.close(); 

    } 

} 

06-13 15:51:46.663 2998年至2998年/? E/AndroidRuntime:致命異常: 主 過程:com.ndot.developer.mcp,PID:2998 java.lang.IllegalStateException:ArrayAdapter需要的資源ID是一個TextView

+0

顯示您的logcat .. !! –

+0

如何解決它幫助我 – Tester

+0

如果你使用的是ArrayAdapter,那麼你的佈局視圖行應該只包含Textview,否則它將無法使用ArrayAdapter –

回答

2

就在您的onCreateView()simple_list_item_2改變佈局ID來simple_list_item_1

public View onCreateView(LayoutInflater inflater,ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View view = inflater.inflate(R.layout.activity_call, container, false); 
    callListView = (ListView)view.findViewById(R.id.listView1); 
    arrayAdapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1,Calllist1); 
    callListView.setAdapter(arrayAdapter); 
    getCallDetails(); 
    return view; 
} 

說明:

爲什麼不android.R.layout.simple_list_item_2

創建新ArrayAdapter需要TextView的作爲佈局 參數,但android.R.layout.simple_list_item_2是裏面包含的兩項TextViews一個 TwoLineListItem佈局。 您 可以通過鍵入這個android.R.layout.simple_list_item_2 檢查它在你的java文件中的字符串上放置一個光標,然後按ctrl鍵。 你可以看到佈局。

爲什麼android.R.layout.simple_list_item_1

android.R.layout.simple_list_item_1本身就是一個TextView的。其中 滿足ArrayAdapter佈局爲 TextView的要求。這是我建議使用這種佈局的原因。

+0

你能告訴我它爲什麼崩潰,爲什麼你建議將simple_list_item_2更改爲simple_list_item_1? – Shubham

+0

@Shubham新增說明。 –

0

如你不傳遞TextviewId來適配它會崩潰應用程序。

替換此

arrayAdapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_2,Calllist1); 

arrayAdapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, android.R.id.text1,Calllist1); 
0

試試這個下面的代碼,

ArrayAdapter arrayAdapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1,Calllist1);