片段标签内的按钮

时间:2016-06-22 11:03:24

标签: android fragment

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

    }

}

1 个答案:

答案 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();


    }

    }

始终建议通过扩展基本适配器来使用我们自己的适配器类。这将使我们对视图有更多的控制权。