【问题标题】:Refreshing cursor after on ClickMethod单击方法后刷新光标
【发布时间】:2015-01-13 15:07:03
【问题描述】:

我对下一个问题有一些问题...方法 fillList() 正在使用我的 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);

    }

填写清单 cursor 的 where 子句中的第二个参数是来自 android 的 Calendar 类的 dayOfTheWeek

public void LoadGrid(Object obj) {
        //


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

这是我的光标,它从我的数据库中获取数据,带有选定的参数:我从 mainActivity 和 DayofTheWeek 获取的 obj.getID() 是日历中的星期几,如您所见

 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));
        }

点击方法

    @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;
}

【问题讨论】:

  • 这里的对象是什么?
  • 我正在使用数据访问对象来管理我的类,这个对象来自用 setter 和 getter 从数据库中描述我的表的类。我从主要活动中获取的这个对象代表哪个数据有用户在其他片段中单击,所以我可以从 table1 获取 ID 并显示来自 table2 的已连接数据

标签: android sqlite cursor adapter


【解决方案1】:

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

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

在分配数据时,请按如下方式使用。

RuntimeData.name=name;

在使用数据时使用如下。

RunTimeData.name=name;

在您的情况下,将 LoadGrid 称为,

LoadGrid(RunTimeData.name)

当您确定不会在某处再次使用该值时释放该对象。

RunTimeData.name=null;

希望这会有所帮助。

【讨论】:

  • 感谢您的回答...但我正在尝试通知我的方法 FillGrid();那个日期已经改变了......有没有办法实现这一点,再次感谢(:
  • 我已经解决了我的问题,通过捆绑将对象的 _id 发送到我的片段......然后在我的 onClick 方法中,我再次调用了我的 LoadGrid 方法,其中 _id 作为 LoadGrid(_id) 的参数。我已经改变了我的方法 LoadGrid 所以现在只使用 int _id...这是一个好的方法吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-15
  • 2020-03-06
相关资源
最近更新 更多