Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/195.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从在onBindViewHolder内随RecyclerView.Adapter扩展的RecyclerViewAdapter启动底板_Java_Android - Fatal编程技术网

Java 从在onBindViewHolder内随RecyclerView.Adapter扩展的RecyclerViewAdapter启动底板

Java 从在onBindViewHolder内随RecyclerView.Adapter扩展的RecyclerViewAdapter启动底板,java,android,Java,Android,我在布局中有一个卡片视图,它有两个文本视图和一个图像视图,还有一个回收器视图,它使用卡片视图设置项目。我想要实现的是在点击卡片视图时启动底部工作表 以下是主活动中的代码 FragmentManager fragmentManager = getSupportFragmentManager(); RecyclerViewAdapter2 mainAdapter2 = new RecyclerViewAdapter2(lstItem,fragmentManager);

我在布局中有一个卡片视图,它有两个文本视图和一个图像视图,还有一个回收器视图,它使用卡片视图设置项目。我想要实现的是在点击卡片视图时启动底部工作表

以下是主活动中的代码

        FragmentManager fragmentManager = getSupportFragmentManager();
        RecyclerViewAdapter2 mainAdapter2 = new RecyclerViewAdapter2(lstItem,fragmentManager);
        mainRecyclerView.setLayoutManager(new GridLayoutManager(this,3));
        mainRecyclerView.setAdapter(mainAdapter2);
列表代码

List<Item> lstItem;

    lstItem = new ArrayList<>();

    lstItem.add(new Item("Samsung","Smartphones","QualitlstItem = new ArrayList<>();y Samsung Smartphones",R.drawable.samsung,"21000"));
    lstItem.add(new Item("Lenovo","Smartphones","Quality Lenovo smartphones",R.drawable.lenovo,"15000"));
回收器视图适配器2代码

        import android.content.Context;
        import android.view.LayoutInflater;
        import android.view.View;
        import android.view.ViewGroup;
        import android.widget.ImageView;
        import android.widget.TextView;


        import androidx.cardview.widget.CardView;
        import androidx.fragment.app.FragmentManager;
        import androidx.recyclerview.widget.RecyclerView;


        import java.util.List;

        public class RecyclerViewAdapter2 extends RecyclerView.Adapter<RecyclerViewAdapter2.MyViewHolder> {

        private Context context;
        private List<Item> data;
        private FragmentManager fragmentManager;

        public RecyclerViewAdapter2(List<Item> data, FragmentManager fragmentManager) {
        this.data = data;
        this.fragmentManager = fragmentManager;
    }


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

        @Override
        public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.tv_item_title.setText(data.get(position).getTitle());
        holder.price.setText(data.get(position).getPrice());
        holder.item_thumbnail.setImageResource(data.get(position).getThumbnail());

        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                BottomSheetFragment bottomSheetFragment = new BottomSheetFragment();
                bottomSheetFragment.show(getSupportFragmentManager(), bottomSheetFragment.getTag());

            }
        });
    }

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

        public static class MyViewHolder extends RecyclerView.ViewHolder{

        TextView tv_item_title;
        TextView price;
        ImageView item_thumbnail;
        CardView cardView;


        public MyViewHolder(View itemView){
            super(itemView);

            tv_item_title = itemView.findViewById(R.id.itemTitleId);
            price = itemView.findViewById(R.id.priceId);
            item_thumbnail = itemView.findViewById(R.id.itemThumbnailId);
            cardView = itemView.findViewById(R.id.cardView);
        }

    }

}
片段代码

        import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;


import androidx.annotation.NonNull;
import androidx.annotation.Nullable;

import com.google.android.material.bottomsheet.BottomSheetDialogFragment;

public class BottomSheetFragment extends BottomSheetDialogFragment {



    public BottomSheetFragment() {

    }

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

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        return inflater.inflate(R.layout.bottomsheet1, container, false);
    }

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);

        //String s=getArguments().getString("myString");
    }
}
我在BindViewHolder中尝试了以下内容:

        @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        holder.tv_item_title.setText(data.get(position).getTitle());
        holder.price.setText(data.get(position).getPrice());
        holder.item_thumbnail.setImageResource(data.get(position).getThumbnail());

        holder.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                AppCompatActivity appCompatActivity = new AppCompatActivity();
                FragmentManager fragmentManager = appCompatActivity.getSupportFragmentManager();
                BottomSheetFragment bottomSheetFragment = new BottomSheetFragment();
                bottomSheetFragment.show(fragmentManager, bottomSheetFragment.getTag());

            }
        });
    }
以下是错误:

        E/AndroidRuntime: FATAL EXCEPTION: main
    Process: manu.apps.victortestapp, PID: 16271
    java.lang.IllegalStateException: Activity has been destroyed
        at androidx.fragment.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:2114)
        at androidx.fragment.app.BackStackRecord.commitInternal(BackStackRecord.java:683)
        at androidx.fragment.app.BackStackRecord.commit(BackStackRecord.java:637)
        at androidx.fragment.app.DialogFragment.show(DialogFragment.java:144)
        at manu.apps.victortestapp.RecyclerViewAdapter2$1.onClick(RecyclerViewAdapter2.java:52)
        at android.view.View.performClick(View.java:6726)
        at android.view.View$PerformClick.run(View.java:25434)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6524)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:451)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:888)
当点击回收器视图中的卡片视图时,我想打开底部纸张。您不能这样做:

AppCompatActivity appCompatActivity = new AppCompatActivity();
FragmentManager fragmentManager = appCompatActivity.getSupportFragmentManager();
BottomSheetFragment bottomSheetFragment = new BottomSheetFragment();
bottomSheetFragment.show(fragmentManager, bottomSheetFragment.getTag());

您应该创建一个包含BottomSheetFragment的新活动(新类),并使用intent启动该活动。

在onClick侦听器中,您需要使用传递给适配器的
fragmentManager
。而是使用
getSupportFragmentManager()
。改变了这个之后,它对我有效

holder.cardView.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
BottomSheetFragment BottomSheetFragment=新的BottomSheetFragment();

//太棒了,我知道你得到了答案
AppCompatActivity appCompatActivity = new AppCompatActivity();
FragmentManager fragmentManager = appCompatActivity.getSupportFragmentManager();
BottomSheetFragment bottomSheetFragment = new BottomSheetFragment();
bottomSheetFragment.show(fragmentManager, bottomSheetFragment.getTag());