【问题标题】:Passing arrays with RecyclerView Holder to Alertdialog将带有 RecyclerView Holder 的数组传递给 Alertdialog
【发布时间】:2019-08-30 12:40:05
【问题描述】:

我正在编写一个可扩展的回收器视图,其中代码与通常的回收器视图略有不同。我的代码中的 bind 方法是在 ViewHolder 中定义的。一切似乎都写得正确,我不明白我的错误是什么。我将数组从 RecyclerView 传递给 AlertDialog 但由于某种原因应用程序崩溃了。这是我的 View Holder 的代码,其中显示了错误字符串:

public class AnalysisViewHolder extends ChildViewHolder {
    HtmlTextView textView;
    FrameLayout frame;
    Context c;
public AnalysisViewHolder(View itemView) {
    super(itemView);
    textView = itemView.findViewById(R.id.text_rc);
    frame = itemView.findViewById(R.id.frame);
}
public void bind(final Analysys analysys){
    textView.setHtml(analysys.name);
    frame.setOnClickListener(new View.OnClickListener() {// here
        @Override
        public void onClick(View v) {
            AlertDialog.Builder aa = new AlertDialog.Builder(c);
            aa.setTitle(analysys.name);
            aa.setMessage(Html.fromHtml(analysys.analysis));
            aa.setNegativeButton(c.getString(R.string.back), new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
        }
    });

}

Мy Stacktrace:

2019-08-29 22:06:45.494 29861-29861/com.vn.iambulance.prototype_20 E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.vn.iambulance.prototype_20, PID: 29861
    java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference
        at android.app.AlertDialog.resolveDialogTheme(AlertDialog.java:224)
        at android.app.AlertDialog$Builder.<init>(AlertDialog.java:474)
        at com.vn.iambulance.prototype_20.adapter_analysis.AnalysisViewHolder.bind(AnalysisViewHolder.java:28)
        at com.vn.iambulance.prototype_20.adapter_analysis.AnalysisAdapter.onBindChildViewHolder(AnalysisAdapter.java:36)
        at com.vn.iambulance.prototype_20.adapter_analysis.AnalysisAdapter.onBindChildViewHolder(AnalysisAdapter.java:13)
        at com.thoughtbot.expandablerecyclerview.ExpandableRecyclerViewAdapter.onBindViewHolder(ExpandableRecyclerViewAdapter.java:82)
        at android.support.v7.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
        at android.support.v7.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
        at android.support.v7.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
        at android.support.v7.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at android.support.v7.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at android.support.v7.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1557)
        at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
        at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:4194)
        at android.view.View.layout(View.java:22406)
        at android.view.ViewGroup.layout(ViewGroup.java:6584)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:22406)
        at android.view.ViewGroup.layout(ViewGroup.java:6584)
        at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1083)
        at android.view.View.layout(View.java:22406)
        at android.view.ViewGroup.layout(ViewGroup.java:6584)
        at android.support.v4.widget.DrawerLayout.onLayout(DrawerLayout.java:1231)
        at android.view.View.layout(View.java:22406)
        at android.view.ViewGroup.layout(ViewGroup.java:6584)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:22406)
        at android.view.ViewGroup.layout(ViewGroup.java:6584)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
        at android.view.View.layout(View.java:22406)
        at android.view.ViewGroup.layout(ViewGroup.java:6584)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:22406)
        at android.view.ViewGroup.layout(ViewGroup.java:6584)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1812)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1656)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1565)
        at android.view.View.layout(View.java:22406)
        at android.view.ViewGroup.layout(ViewGroup.java:6584)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at com.android.internal.policy.DecorView.onLayout(DecorView.java:1041)
2019-08-29 22:06:45.495 29861-29861/com.vn.iambulance.prototype_20 E/AndroidRuntime:     at android.view.View.layout(View.java:22406)
        at android.view.ViewGroup.layout(ViewGroup.java:6584)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:3380)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2849)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1897)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:8514)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:949)
        at android.view.Choreographer.doCallbacks(Choreographer.java:761)
        at android.view.Choreographer.doFrame(Choreographer.java:696)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:935)
        at android.os.Handler.handleCallback(Handler.java:873)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7076)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:965)

【问题讨论】:

    标签: android arrays android-recyclerview android-alertdialog


    【解决方案1】:

    你的错误是这样的:-

    java.lang.NullPointerException: Attempt to invoke virtual method 'android.content.res.Resources$Theme android.content.Context.getTheme()' on a null object reference
    

    我问你。你解决了吗……

    AlertDialog.Builder aa = new AlertDialog.Builder(c);
    

    你的正确路线在这里......

    AlertDialog.Builder aa = new AlertDialog.Builder(context);
    

    在您的项目要求中创建适配器的活动内的构造函数。在活动或适配器上下文中声明,这个问题就解决了......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 1970-01-01
      • 2017-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多