我有3个标签;其中一个选项卡必须使用内容解析程序读取呼叫日志。我在布局中放了4个按钮,分别显示这些通话记录,通过"错过","传入","传出","所有通话" 。当我点击按钮"未接来电"它只显示listView
中带有该标签的未接来电。现在如何使用这些按钮显示代码?
public class TabFragment2 extends Fragment {
Button b1,b2,b3,b4;
private Toolbar supportActionBar;
private FragmentManager supportFragmentManager;
ArrayList<HashMap<String, String>> Calllist1 = new ArrayList<>();
ListView callListView;
ArrayAdapter 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);
Button b1 = (Button) view.findViewById(R.id.button);
/* arrayAdapter = new ArrayAdapter<String>(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, Calllist1);
callListView.setAdapter(arrayAdapter);*/
getCallDetails();
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
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 != null && managedCursor.moveToNext()) {
String phNum = managedCursor.getString(number);
String callTypeCode = managedCursor.getString(type);
String strcallDate = managedCursor.getString(date);
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yy HH:mm");
long seconds = managedCursor.getLong(date);
String dateString = formatter.format(new Date(seconds));
String callDuration = managedCursor.getString(duration);
String callType = null;
HashMap<String, String> callMap = new HashMap<String, String>();
callMap.put("NUMBER", phNum);
callMap.put("CALL", callTypeCode);
callMap.put("DATE", dateString);
callMap.put("DURATION", callDuration);
Calllist1.add(callMap);
int callcode = Integer.parseInt(callTypeCode);
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();
callListView.setAdapter(new CallAdapter(getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, Calllist1));
}
}
答案 0 :(得分:0)
我在代码中做了一些更改。请试试。
public class TabFragment2 extends Fragment {
Button b1,b2,b3,b4;
private Toolbar supportActionBar;
private FragmentManager supportFragmentManager;
ArrayList<HashMap<String, String>> callListDisplay = new ArrayList<>();
ArrayList<HashMap<String, String>> callMissed = new ArrayList<>();
ArrayList<HashMap<String, String>> callOutgoing = new ArrayList<>();
ArrayList<HashMap<String, String>> callIncoming = new ArrayList<>();
ListView callListView;
CallAdapter 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);
Button b1 = (Button) view.findViewById(R.id.button);
arrayAdapter= new CallAdapter(getActivity(), android.R.layout.simple_list_item_1, callListDisplay)
callListView.setAdapter(arrayAdapter);
getCallDetails();
// to load initial values
loadValues(0);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadValues(0);
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadValues(1);
}
});
b3.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
loadValues(2);
}
});
return view;
}
private void loadValues(int type){
if(type==0){
callListDisplay.clear();
callListDisplay.addAll(callMissed);
arrayAdapter.notifyDataSetChanged();
}else if(type==1){
callListDisplay.clear();
callListDisplay.addAll(callOutgoing);
arrayAdapter.notifyDataSetChanged();
}else if(type==2){
callListDisplay.clear();
callListDisplay.addAll(callIncoming);
arrayAdapter.notifyDataSetChanged();
}
}
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 != null && managedCursor.moveToNext()) {
String phNum = managedCursor.getString(number);
String callTypeCode = managedCursor.getString(type);
String strcallDate = managedCursor.getString(date);
SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yy HH:mm");
long seconds = managedCursor.getLong(date);
String dateString = formatter.format(new Date(seconds));
String callDuration = managedCursor.getString(duration);
String callType = null;
HashMap<String, String> callMap = new HashMap<String, String>();
callMap.put("NUMBER", phNum);
callMap.put("CALL", callTypeCode);
callMap.put("DATE", dateString);
callMap.put("DURATION", callDuration);
int callcode = Integer.parseInt(callTypeCode);
switch (callcode) {
case CallLog.Calls.OUTGOING_TYPE:
callType = "Outgoing";
callOutgoing.add(callMap);
break;
case CallLog.Calls.INCOMING_TYPE:
callType = "Incoming";
callIncoming.add(callMap);
break;
case CallLog.Calls.MISSED_TYPE:
callType = "Missed";
callMissed.add(callMap);
break;
}
}
managedCursor.close();
}
}
始终建议通过扩展基本适配器来使用我们自己的适配器类。这将使我们对视图有更多的控制权。