在ClickMethod之后刷新光标

时间:2015-01-13 15:07:04

标签: android sqlite cursor adapter

我有下一个问题的一些问题...方法fillList()填充listview我的CustomAdapter ...方法从我的MainActivity调用,它从它传递对象 我必须在onClick方法之后刷新我的光标以使用具有不同参数的数据填充列表          公共类FragmentChosenDiet扩展ListFragment实现了View.OnClickListener {

    Button next, previous;
    Calendar cal = Calendar.getInstance();
    int DayOfTheWeek;
    String formattedDate;
    TextView date;
    SimpleDateFormat df;
    SQLController sqlC;
    private ArrayList items;
    private CustomAdapter cAdapter;


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

        View v = inflater.inflate(R.layout.fragment_chosen_diet, container, false);

        return v;
    }

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

        //get current date
        df = new SimpleDateFormat("dd.MM.yyyy EEEE");
        formattedDate = df.format(cal.getTime());


        date = (TextView) getActivity().findViewById(R.id.Datum);
        next = (Button) getActivity().findViewById(R.id.bNext);
        previous = (Button) getActivity().findViewById(R.id.bPrevious);
        DayOfTheWeek=cal.get(Calendar.DAY_OF_WEEK);
        date.setText(formattedDate + " " + DayOfTheWeek);


        next.setOnClickListener(this);
        previous.setOnClickListener(this);

    }

填写清单 游标where子句中的第二个参数是来自android的日历类的dayOfTheWeek

public void LoadGrid(Object obj) {
        //


DayOfTheWeek=cal.get(Calendar.DAY_OF_WEEK);
        sqlC = new SQLController(getActivity());
            sqlC.open();

这是我的光标,它从我的数据库中获取数据,带有选定的参数:obj.getID(),我从mainActivity和DayofTheWeek获取,它是日历中的星期几,你可以看到

 DayOfTheWeek=cal.get(Calendar.DAY_OF_WEEK);
            Cursor c = sqlC.readJelovnikTable(obj.getID(),DayOfTheWeek);
            c.moveToFirst();
            if (!c.isAfterLast()) {
                do {

                    int tableID = c.getInt(c.getColumnIndex(SQLController.colJelPrehID_fk));
                    String col1Table1 = c.getString(c.getColumnIndex(SQLController.colJelvrID_fk));
                    String col2Table1 = c.getString(c.getColumnIndex(SQLController.colJelDorID_fk));


                    items.add(new Items(tableID,col1Table1,col2Table1))

                } while (c.moveToNext());
            }
            c.close();
            setListAdapter(cAdapter =new CustomAdapter(getActivity(), android.R.layout.simple_list_item_1,
                items));
        }

on Click方法

    @Override
    public void onClick(View v) {

        switch(v.getId()){

我正在改变我的onClick方法的日期,我的问题是我不知道如何刷新光标与更改日期,即DayOfTheWeek ..所以它可以填充         //列出包含新数据的视图,我不能再从这里调用我的LoadGrid()方法,因为我无法将对象传递给它...就像我在从主要活动中获取对象之前说的那样

            case R.id.bNext:
                cal.add(Calendar.DATE, 1);
                formattedDate = df.format(cal.getTime());
                DayOfTheWeek=cal.get(Calendar.DAY_OF_WEEK);
                date.setText(formattedDate + " " + DayOfTheWeek);
                cAdapter.notifyDataSetChanged();

                break;

同样的事情是减少日期
    //上一个日期

            case R.id.bPrevious:
                cal.add(Calendar.DATE, -1);
                formattedDate = df.format(cal.getTime());
                date.setText(formattedDate + " " + cal.get(Calendar.DAY_OF_WEEK));

                break;

        }
    }

和我的光标来自SQLController

 public Cursor readTable(int objID,int dayID){
    database = dbHelper.getReadableDatabase();
    String[] allColumns=new String[]{colID,col1,col2,col3,col4};
    Cursor c=database.query(Table1,allColumns,col1ID+"=? AND "+col2ID_fk+"=?",
            new String[]{String.valueOf(objID),String.valueOf(dayID)},null,null,null);
    if (c != null) {
        c.moveToFirst();
    }
    return c;
}

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作。您可以创建一个名为RunTimeData的类,您可以在其中保存对象。使用方法如下。

public class RunTimeData{
    public static Object name=null;
}

虽然分配数据的确如下使用。

RuntimeData.name=name;

使用数据时使用如下。

RunTimeData.name=name;

在您的情况下,将LoadGrid称为

LoadGrid(RunTimeData.name)

当您确定某个地方不再使用该值时,释放该对象。

RunTimeData.name=null;

希望这有帮助。