не может начать загрузку еще не прикрепленного представления или фрагмента, где getActivity () возвращает значение NULL - PullRequest
0 голосов
/ 31 января 2020

У меня есть верхняя строка меню для фрагмента, и если щелкнуть меню, в активности clas появится Activity.class , что приведет к выводу данных List с помощью Recyclerview, содержащегося в элементе изображения. , Если в Adapter.class я вызываю исходное изображение с помощью Glide, появляется ошибка "невозможно начать загрузку в еще не прикрепленном представлении или фрагменте, где getActivity () возвращает ноль" Если я стараться не вызывать изображение, загрузить данные успешно. В моем списке данных проблема должна иметь изображение. Я попытался использовать GetActivity , Context , но это не сработало. в этом случае я не нашел решения.

Adapter.class

public class AdapterCart extends RecyclerView.Adapter<AdapterCart.HolderCart> {

    String ImageProduct;
    List<DataItem> dataItemList;
    Context mContext;

    public  AdapterCart(Context context , List<DataItem> dataList){
        this.mContext= context;
        dataItemList = dataList;
    }

    @NonNull
    @Override
    public HolderCart onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.adapter_cart, parent,false);
        return  new HolderCart(view);
    }

    @Override
    public void onBindViewHolder(@NonNull HolderCart holder, int position) {
            final DataItem dataItem = dataItemList.get(position);

            holder.txt_id.setText(dataItem.getId());
            holder.txt_id_product_category.setText(dataItem.getIdProductCategory());
           holder.txt_image.setText(dataItem.getFilename());

            Glide.with(mContext)
                    .load(ImageProduct)
                    .placeholder(R.drawable.no_image)
                    .error(R.drawable.no_image)
                    .into(holder.image);

    }

    @Override
    public int getItemCount() {
        return dataItemList.size();
    }

    public class HolderCart extends RecyclerView.ViewHolder {

        @BindView(R.id.txt_name_product)
        TextView txt_name_product;
        @BindView(R.id.txt_price_capital)
        TextView txt_price_capital;
        @BindView(R.id.txt_image)
        TextView txt_image;
        @BindView(R.id.txt_status)
        TextView txt_status;
        @BindView(R.id.image)
        ImageView image;



        public HolderCart(@NonNull View itemView) {
            super(itemView);
            ButterKnife.bind(this, itemView);
        }
    }
}

Fragment.class

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    setHasOptionsMenu(true);
    super.onCreate(savedInstanceState);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menutopbar, menu);

    super.onCreateOptionsMenu(menu, inflater);
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {

    int id = item.getItemId();

    if (id == R.id.notifikasi){
        Toast.makeText(getActivity(), "ini Notifikasi", Toast.LENGTH_SHORT).show();

    }
    if (id == R.id.cartshop){
        gotocartshop();
    }
    return super.onOptionsItemSelected(item);



}

private void gotocartshop() {
    Intent intent_cart = new Intent(getContext(), Cart.class);
    intent_cart.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(intent_cart);
}

ErrorMessage

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.application.Example, PID: 4330
    java.lang.NullPointerException: You cannot start a load on a not yet attached View or a Fragment where getActivity() returns null (which usually occurs when getActivity() is called before the Fragment is attached or after the Fragment is destroyed).
        at com.bumptech.glide.util.Preconditions.checkNotNull(Preconditions.java:29)
        at com.bumptech.glide.Glide.getRetriever(Glide.java:709)
        at com.bumptech.glide.Glide.with(Glide.java:741)
        at com.application.Example.Adapter.AdapterCart.onBindViewHolder(AdapterCart.java:80)
        at com.application.Example.Adapter.AdapterCart.onBindViewHolder(AdapterCart.java:31)
        at androidx.recyclerview.widget.RecyclerView$Adapter.onBindViewHolder(RecyclerView.java:6781)
        at androidx.recyclerview.widget.RecyclerView$Adapter.bindViewHolder(RecyclerView.java:6823)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryBindViewHolderByDeadline(RecyclerView.java:5752)
        at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:6019)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
        at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
        at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
        at androidx.recyclerview.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:557)
        at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
        at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
        at androidx.recyclerview.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:171)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
        at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
        at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4194)
        at android.view.View.layout(View.java:19685)
        at android.view.ViewGroup.layout(ViewGroup.java:6079)
        at androidx.swiperefreshlayout.widget.SwipeRefreshLayout.onLayout(SwipeRefreshLayout.java:625)
        at android.view.View.layout(View.java:19685)
        at android.view.ViewGroup.layout(ViewGroup.java:6079)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
        at android.view.View.layout(View.java:19685)
        at android.view.ViewGroup.layout(ViewGroup.java:6079)
        at androidx.constraintlayout.widget.ConstraintLayout.onLayout(ConstraintLayout.java:1915)
        at android.view.View.layout(View.java:19685)
        at android.view.ViewGroup.layout(ViewGroup.java:6079)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19685)
        at android.view.ViewGroup.layout(ViewGroup.java:6079)
        at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:444)
        at android.view.View.layout(View.java:19685)
        at android.view.ViewGroup.layout(ViewGroup.java:6079)
        at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323)
        at android.widget.FrameLayout.onLayout(FrameLayout.java:261)
        at android.view.View.layout(View.java:19685)
        at android.view.ViewGroup.layout(ViewGroup.java:6079)
        at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1791)
        at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1635)
        at android.widget.LinearLayout.onLayout(LinearLayout.java:1544)
        at android.view.View.layout(View.java:19685)
        at android.view.ViewGroup.layout(ViewGroup.java:6079)
        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:764)
E/AndroidRuntime:     at android.view.View.layout(View.java:19685)
        at android.view.ViewGroup.layout(ViewGroup.java:6079)
        at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2541)
        at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2257)
        at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1437)
        at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6886)
        at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1029)
        at android.view.Choreographer.doCallbacks(Choreographer.java:841)
        at android.view.Choreographer.doFrame(Choreographer.java:772)
        at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1015)
        at android.os.Handler.handleCallback(Handler.java:794)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:176)
        at android.app.ActivityThread.main(ActivityThread.java:6651)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:824)
...