【发布时间】: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