У меня есть верхняя строка меню для фрагмента, и если щелкнуть меню, в активности 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)