java 游标适配器getview问题在位置0

68bkxrlz  于 2023-01-19  发布在  Java
关注(0)|答案(1)|浏览(129)

我正在使用一个带有事件的日历应用程序,我将它们保存在MyDatabaseHelpe中,事件按天显示在列表视图中,我的问题是,在onitemclicked中,我希望事件的数据显示在AlertDialog中,我使用CursorAdapter类,当我试图显示数据时,位置0的数据未显示,显示位置1的数据。
我已经尝试了许多方法的立场,可以适合在功能,我搜索了许多StackOverFlows(和更多的网站)的主题,以找到一个解决方案。

    • 删除行功能工作正常,没有任何问题。

任何想法或方法都将是有益的!
'

单击时列表视图的方法

'私有void对话框单击项和删除(){

monthListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        View view1 = getLayoutInflater().inflate(R.layout.show_event_from_listview, null);
        Object listItem = monthListView.getItemAtPosition(position).toString();
        EventCursorAdapter EC = new EventCursorAdapter(MainActivity.this, myDB.readAllData());
        Cursor cursor = EC.getCursor();
        cursor.moveToPosition(position);
        View view2 = EC.getView(position,view1,parent);



            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

            builder.setView(view2).

                    setPositiveButton("Delete", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {

                            String id_row = hourAdapter.getItem(position).getEvents().get(0).getId();
                            myDB.deleteOneRow(id_row);

                            AllEventsList.reloadActivity(MainActivity.this);

                        }
                    }).setNegativeButton("Exit", new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            AllEventsList.reloadActivity(MainActivity.this);

                        }
                    });

            builder.show();
        }

});

}'
x一个一个一个一个x一个一个二个一个x一个一个三个一个
我尝试的另一种方法是

View view2 = EC.getView(position,view1,parent);
            View view3 = monthListView.getChildAt(position - monthListView.getFirstVisiblePosition());
            View view4 = EC.newView(EC.mContext,EC.mCursor,parent);

            View view5=hourAdapter.getView(position,view1,parent);

更新日期:2022年12月27日
我注意到我的问题可能是因为我排序我的列表。
私有void setMonthAdapter(){小时适配器=新的小时适配器(获取应用程序上下文(),所有事件列表。小时事件列表来自数据库(获取应用程序上下文(),myDB));

hourAdapter.sort((o1, o2) -> o1.events.get(0).getDate().compareTo(o2.events.get(0).getDate()));
    hourAdapter.sort((o1, o2) -> o1.events.get(0).getTime().compareTo(o2.events.get(0).getTime()));

    monthListView.setAdapter(hourAdapter);


}

我可以检索值,但顺序错误,在我的列表视图中,我的事件是按时间和日期排序的,当我单击位置0中的项目时,它会显示位置1中的项目,反之亦然。

    • 解决方案:**

问题是在排序列表之后,我没有调用notifyDataChanged();
此外,我在我的CursorAdapter类中创建了一个通过游标检索字段的方法。
所以在游标适配器中我做了这个:

public View setAllFields(View view,String id, String title, String comment, String date, String time)
{

    TextView id_lv_tv = (TextView) view.findViewById(R.id.id_lv_tv);
    TextView title_lv_tv = (TextView) view.findViewById(R.id.title_lv_tv);
    TextView comment_lv_tv = (TextView) view.findViewById(R.id.comment_lv_tv);
    TextView date_lv_tv = (TextView) view.findViewById(R.id.date_lv_tv);
    TextView time_lv_tv = (TextView) view.findViewById(R.id.time_lv_tv);

    id_lv_tv.setText(id);
    title_lv_tv.setText(title);
    comment_lv_tv.setText(comment);
    date_lv_tv.setText(date);
    time_lv_tv.setText(time);

    return view;
}

而我现在的主onitemclick是这样的:
公共void onItemClick(适配器视图父视图,视图视图,整数位置,长ID){视图view1 = getLayoutInflater(). inflate(www.example.com_event_from_listview,空);R.layout.show小时事件myEvent =(小时事件)月列表视图. getAdapter(). getItem(位置); // private ArrayList MlaDats = new ArrayList(); HourEvent myEvent = (HourEvent) monthListView.getAdapter().getItem(position);

String myEventId= myEvent.getEvents().get(0).getId();
            String myTitle = myEvent.getEvents().get(0).getName();
            String myComment = myEvent.getEvents().get(0).getComment();
            String myDate = String.valueOf(myEvent.getEvents().get(0).getDate());
            String myTime = String.valueOf(myEvent.getEvents().get(0).getTime());

            View viewFinal;


            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

                viewFinal = CA.setAllFields(view1,myEventId,myTitle,myComment,myDate,myTime);

//viewFinal = SD.getView(位置,视图1,父视图);

builder.setView(viewFinal).

关闭

eyh26e7m

eyh26e7m1#

我正在使用一个带有事件的日历应用程序,我将它们保存在MyDatabaseHelpe中,事件按天显示在列表视图中,我的问题是,在onitemclicked中,我希望事件的数据显示在AlertDialog中,我使用CursorAdapter类,当我试图显示数据时,位置0的数据,arent显示并且显示在位置1的数据.游标适配器getview问题在位置0
我已经尝试了许多方法的立场,可以适合在功能,我搜索了许多StackOverFlows(和更多的网站)的主题,以找到一个解决方案。

    • 删除行功能工作正常,没有任何问题。

任何想法或方法都将是有益的!

    • 解决方案:**

问题是在排序列表之后,我没有调用notifyDataChanged();
此外,我在我的CursorAdapter类中创建了一个通过游标检索字段的方法。
所以在游标适配器中我做了这个:

public View setAllFields(View view,String id, String title, String comment, String date, String time)
{

    TextView id_lv_tv = (TextView) view.findViewById(R.id.id_lv_tv);
    TextView title_lv_tv = (TextView) view.findViewById(R.id.title_lv_tv);
    TextView comment_lv_tv = (TextView) view.findViewById(R.id.comment_lv_tv);
    TextView date_lv_tv = (TextView) view.findViewById(R.id.date_lv_tv);
    TextView time_lv_tv = (TextView) view.findViewById(R.id.time_lv_tv);

    id_lv_tv.setText(id);
    title_lv_tv.setText(title);
    comment_lv_tv.setText(comment);
    date_lv_tv.setText(date);
    time_lv_tv.setText(time);

    return view;
}

我现在的主页是这样的:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) { View view1 = getLayoutInflater().inflate(R.layout.show_event_from_listview, null); // private ArrayList MlaDats = new ArrayList(); HourEvent myEvent = (HourEvent) monthListView.getAdapter().getItem(position);

            String myEventId= myEvent.getEvents().get(0).getId();
            String myTitle = myEvent.getEvents().get(0).getName();
            String myComment = myEvent.getEvents().get(0).getComment();
            String myDate = String.valueOf(myEvent.getEvents().get(0).getDate());
            String myTime = String.valueOf(myEvent.getEvents().get(0).getTime());

            View viewFinal;


            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);

                viewFinal = CA.setAllFields(view1,myEventId,myTitle,myComment,myDate,myTime);
// viewFinal = SD.getView(position, view1, parent);

            builder.setView(viewFinal).

相关问题