如何刷新列表视图的内容

时间:2016-03-10 15:59:26

标签: android

我制作了一个列表视图,显示了数据库中的内容。但是,如果我通过不同的活动在数据库中添加数据,那么仅当我关闭然后启动我的应用程序时,修改后的列表视图才可见。

那么如何刷新我的列表视图,以便输入数据后,它就会在列表中显示。

我听说过notifyDataSetChange()但不知道把它放在我的代码中的哪个位置。

请帮忙。 TimePickerPop类是将数据添加到数据库的类。

    public class MainActivityFragment2 extends Fragment {

    private List<TimeList> TDList = new ArrayList<TimeList>();

    public MainActivityFragment2() {
    }

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

        populateTimeList();
    }

    private void populateTimeList() {
        Context ctx = this.getActivity();
        DBoperations db = new DBoperations(ctx);
        Cursor cr = db.getInformation(db);
        cr.moveToFirst();
        String TimeH, TimeM, EtimeH, EtimeM;
        do {
            TimeH = Integer.toString(cr.getInt(1));
            TimeM = Integer.toString(cr.getInt(2));
            EtimeH = Integer.toString(cr.getInt(3));
            EtimeM = Integer.toString(cr.getInt(4));
            TDList.add((new TimeList(TimeH + " : " + TimeM, EtimeH + " : " + EtimeM)));
        }while (cr.moveToNext());
    }

    private class MyAdapter extends ArrayAdapter<TimeList> {

        public MyAdapter(Context context, List<TimeList> values) {

            super(context, R.layout.time_list_item,values);
        }
        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            View v = convertView;
            LayoutInflater inflater = LayoutInflater.from(getContext());

            if( v == null){
                v = inflater.inflate(R.layout.time_list_item, parent, false);
            }

            TimeList currLoc = TDList.get(position);

            TextView theTextView = (TextView) v.findViewById(R.id.time_list_item_textview1);
            theTextView.setText(currLoc.getTime());

            theTextView = (TextView) v.findViewById(R.id.time_list_item_textview2);
            theTextView.setText(currLoc.getDuration());

            return v;
        }
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.time_list_view, container, false);

        ListView list = (ListView) rootView.findViewById(R.id.time_list_view);
        ArrayAdapter<TimeList> adapter = new MyAdapter(getActivity(),TDList);
        list.setAdapter(adapter);
        //adapter.notifyDataSetChanged();  // not working
        setRetainInstance(true);

        ImageButton ib = (ImageButton) rootView.findViewById(R.id.imageButton1);
        ib.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivity(new Intent(MainActivityFragment2.this.getActivity(), TimePickerPopup.class));
            }
        });

        return rootView;
    }
} 

这是TimePickerPopup类。

    public class TimePickerPopup extends Activity {

    Context ctx =this;

    private TimePicker time_picker1;
    private TimePicker time_picker2;
    private ImageButton select_time1;
    private ImageButton select_time2;

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

        setContentView(R.layout.time_picker);

        DisplayMetrics dm = new DisplayMetrics();
        getWindowManager().getDefaultDisplay().getMetrics(dm);

        int width = dm.widthPixels;
        int height = dm.heightPixels;

        getWindow().setLayout((int) (width * .8), (int) (height * .7+50));

        time_picker1 = (TimePicker) findViewById(R.id.timePicker1);
        time_picker2 = (TimePicker) findViewById(R.id.timePicker2);
        select_time1 = (ImageButton) findViewById(R.id.selectButton1);
        select_time2 = (ImageButton) findViewById(R.id.selectButton2);

        select_time1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getBaseContext(),"Start time " + time_picker1.getCurrentHour() + " : " + time_picker1.getCurrentMinute(), Toast.LENGTH_SHORT).show();
                ScrollView sv1 = (ScrollView) findViewById(R.id.sv);
                sv1.fullScroll(View.FOCUS_DOWN);
            }
        });

        select_time2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(getBaseContext(),"End time " + time_picker2.getCurrentHour() + " : " + time_picker2.getCurrentMinute(), Toast.LENGTH_SHORT).show();
                DBoperations db = new DBoperations(ctx);
                db.putInfo(db, time_picker1.getCurrentHour(), time_picker1.getCurrentMinute(), time_picker2.getCurrentHour(), time_picker2.getCurrentMinute(), 0, 0);
                finish();
            }
        });
    }
}

1 个答案:

答案 0 :(得分:0)

适配器中的

创建:

public void notifyChange() {
    notifyDataSetChanged();
}

并从您的活动电话:

adapter.notifyChange();