【问题标题】:Custom layout within fragment片段内的自定义布局
【发布时间】:2016-08-16 10:06:04
【问题描述】:

我有一个包含自定义布局和事件侦听器的片段来处理用户与自定义视图的交互。但是在片段内设置事件侦听器时出现空指针异常。在这里,我发现自定义视图引用在fragment中为null。

public class CustomCalendarView extends LinearLayout {

private EventListener eventListener;
public CustomCalendarView(Context context, AttributeSet attrs) 
{
    super(context);
    ............
    cellView = (GridView) findViewById(R.id.calendar_grid);
    cellView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
        @Override
        public boolean onItemLongClick(AdapterView<?> adapterView, View view, int i, long l) {
            if (eventListener == null)
                return false;

            eventListener.onDayLongPress((Date) adapterView.getItemAtPosition(i));
            return true;
        }
    });
}

public void setEventListener(EventListener eventListener) {
    this.eventListener = eventListener;
}

public interface EventListener {
    void onDayLongPress(Date date);
}

}

public class DescribeFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
{
    View view = inflater.inflate(R.layout.fragment_explore_planner, container, false);
    MainActivity activity = (MainActivity) getActivity();

    customCalendarView = ((CustomCalendarView) view.findViewById(R.id.calendar_view));
    customCalendarView.setEventListener(new CustomCalendarView.EventListener() {
        @Override
        public void onDayLongPress(Date date) {
            Toast.makeText(getContext(), timeFormatter.format(date), Toast.LENGTH_SHORT).show();
        }
    });

}

【问题讨论】:

  • 请提供您的代码。设置监听器并从布局中获取视图的代码
  • 你得到 NPE 是因为你的一个表达式在某处有一个空引用。可以肯定的是,大多数人都不看你的代码就能知道!
  • 也许 cellView 有一个空引用?

标签: android android-fragments android-custom-view


【解决方案1】:

你到底哪里有错误?有3种可能。首先,customCalendarView 可以为空。检查 fragment_explore_plannercalendar_view 和 id R.id.calendar_view。其次,作为参数传递给EventListenerDate 对象可以为空。检查adapterView 是否为空或包含i 位置。还要检查timeFormatter

【讨论】:

  • 刚刚发现custmCalendarView为空
  • 如果能帮到你我很高兴。
  • 但其他视图不为空。我不知道为什么这个自定义视图单独为空。
  • 检查fragment_explore_planner xml 是否包含calendar_view
  • 我终于解决了这个问题。我在构造函数 CustomCalendarView(Context context, AttributeSet attrs) 中传递了 super(context) 而不是 super(context, attrs)
【解决方案2】:

我发现我没有从自定义视图的构造函数中调用 super(context, attrs)。 在以 context 和 attrs 作为参数的构造函数中将 super(context) 更改为 super(context, attrs) 解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    • 2017-04-14
    • 1970-01-01
    相关资源
    最近更新 更多