【问题标题】:How do I pass a View inside a DatePickerFragment? Using ListView and ArrayAdapter如何在 DatePickerFragment 中传递视图?使用 ListView 和 ArrayAdapter
【发布时间】:2016-07-15 09:02:36
【问题描述】:

我正在学习使用 Pickers,但在将 View 传递给 DatePickerFragment 时遇到问题。这是一个完整项目源文件示例的 github 链接:https://github.com/MienTommy/DatePickerFragment

这里是实现 DatePickerFragment 的源代码

package com.mienapps.datepickerfragment;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.DatePicker;
import android.widget.TextView;

import java.util.Calendar;
import java.util.List;

public class CustomAdapter extends ArrayAdapter<TextView>
{
    Activity mContext;
    public CustomAdapter(Activity context, List<TextView> views)
    {
        super(context, 0, views);
        mContext = context;
    }

    /*Get view from adapter*/
    @Override
    public View getView(int position, View convertView, ViewGroup parent)
    {
        View itemView = convertView;
        if (convertView == null)
        {
            itemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
        }

        TextView datePickerView = (TextView) itemView.findViewById(R.id.date_picker);

        datePickerView.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                DialogFragment newFragment = new DatePickerFragment();
                newFragment.show(mContext.getFragmentManager(), "datePicker");
            }
        });

        return itemView;
    }

    /*Time Picker*/
    public static class DatePickerFragment extends DialogFragment
            implements DatePickerDialog.OnDateSetListener {

        @Override
        public Dialog onCreateDialog(Bundle savedInstanceState) {
            // Use the current date as the default date in the picker
            final Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH);
            int day = c.get(Calendar.DAY_OF_MONTH);


            // Create a new instance of DatePickerDialog and return it
            return new DatePickerDialog(getActivity(), this, year, month, day);
        }

        public void onDateSet(DatePicker view, int year, int month, int day) {
            //TODO: set itemView to the date that is picked. However I can't access it from here.
        }
    }
}

在 TODO 部分,我想访问 itemView,以便可以将文本设置为用户选择的任何日期。我不能使用 findViewById 来引用 TextView,因为我的 TextView 是 ListView 的一部分。

【问题讨论】:

  • 你有 textview 列表,然后你想将日期设置为从 datepicker 中选择日期的视图?
  • 是的,这就是我想要做的。
  • 您可以将接口用作活动的回调,并通过在适配器上调用 notifyDateSetChanged 来使用带有 getter setter 的模型类和更新适配器中的视图
  • 我创建了一个拉取请求,其中包含如何执行您在评论中刚刚提出的问题的基本版本。看看有没有帮助
  • 运行您的代码时,我在 DatePickerFragment.java:68 处收到 NullPointerException。

标签: android listview datepicker bundle dialogfragment


【解决方案1】:
  1. 您可以在 DatePickerFragment 上添加一个接口并在您的适配器类中实现该接口,只要 DatePickerFragment 更新日期,您就可以调用该接口。在适配器类中,您可以覆盖接口以做任何您想做的事情。如果您是新的接口,您可以在此处查看示例http://www.tutorialspoint.com/java/java_interfaces.htm

  2. 您可以将 DatePickerFragment 中的更新值存储在数据库中,并在显示列表时从数据库中读取值。

【讨论】:

  • 我找不到实例化接口的方法。你能举个例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
相关资源
最近更新 更多