Android:RecyclerView不在片段中显示列表项

Android:RecyclerView不在片段中显示列表项,android,android-recyclerview,fragment,Android,Android Recyclerview,Fragment,有人能帮我让我的回收视图出现吗。如果我不在片段中实现它,它就会出现。然而,当我尝试将其实现为一个片段时,我的另一个XML代码(CarFront)显示在RecyclerView之外 我的日志中出现以下错误: “E/RecyclerView:未连接适配器;跳过布局” 下面是我的代码,如果您需要任何其他信息或代码的其他部分,请随时在下面发表评论。多谢各位 适配器: (我不擅长格式化和解释我的问题。但是,基本上我的RecyclerView没有显示在我的fragement中。它是用来显示Cardview/

有人能帮我让我的回收视图出现吗。如果我不在片段中实现它,它就会出现。然而,当我尝试将其实现为一个片段时,我的另一个XML代码(CarFront)显示在RecyclerView之外

我的日志中出现以下错误: “E/RecyclerView:未连接适配器;跳过布局”

下面是我的代码,如果您需要任何其他信息或代码的其他部分,请随时在下面发表评论。多谢各位

适配器:
(我不擅长格式化和解释我的问题。但是,基本上我的RecyclerView没有显示在我的fragement中。它是用来显示Cardview/s的)

好的,首先,你的片段的结构应该如下所示。在
onCreateView
中,只需将布局充气,然后在
onViewCreated
中绑定/填充信息

我们还使用了
newInstance
,因为这是创建新片段的标准方法

注意,我使用的是
android.support.v4.app.Fragment
,而不是旧的
Fragment

public class CarFrontFragment extends Fragment {

    public ImageView bumper; // Do not use static views.
    public ImageView hood;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_car_front, container, false);
    }

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

        // Bind your views.
        RecyclerView list = (RecyclerView) view.findViewById(R.id.front_recyclerview);
        bumper = (ImageView) view.findViewById(R.id.fbumperselected);
        hood = (ImageView) view.findViewById(R.id.hoodselected);

        // Create your layout manager.
        LinearLayoutManager layout = new LinearLayoutManager(getContext());
        list.setLayoutManager(layout);

        // Fetch your items.
        List<ItemObject> rowListItem = getAllItemList();

        // Set your adapter
        RecyclerViewAdapter adapter = new RecyclerViewAdapter(getContext(), rowListItem);
        list.setAdapter(adapter);

    }

    // Creating a new Fragment through newInstance.
    public static CarFrontFragment newInstance() {
        return new CarFrontFragment();
    }


    // Fetching items, passing in the View they will control.
    private List<ItemObject> getAllItemList(){
        List<ItemObject> allItems = new ArrayList<ItemObject>();

        allItems.add(new ItemObject("", R.drawable.hood_selected), hood);
        allItems.add(new ItemObject("", R.drawable.bumped_selected), bumper);

        return allItems;
    }
}
在适配器中,我们要做的就是传递ItemObject正在控制的
视图

public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {

    private List<ItemObject> itemList;
    private Context context;

    public RecyclerViewAdapter(Context context, List<ItemObject> itemList) {
        this.itemList = itemList;
        this.context = context;
    }

    @Override
    public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_list, null);
        RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView);
        return rcv;

    }

    @Override
    public void onBindViewHolder(RecyclerViewHolders holder, int position) {
        holder.photo.setImageResource(itemList.get(position).getPhoto());
        // Telling the holder about the View.
        holder.view = itemList.get(position).getView();
    }

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

您的
CarFront
类不是在扩展片段,而是在扩展
appcompatiacvity
。您在哪里创建片段?我在你的代码里找不到。
Welcome
是欢迎浏览教程的一种方式吗?好的,让我尝试帮助您修复设置中的一些项目。给我一点时间。没关系,我只是想试着重写一些东西,然后我们会看看这是否有助于让你走上正确的轨道。好的,我发布了一个关于如何构造你的
片段
查看页面
,尝试检查一下。再次感谢你(这些评论真的很有帮助)。这看起来真的很吓人。我担心我现在可能无法像以前那样与单个卡片交互。我是否可以发布我的RecycleServiceWholder,以便您可以快速查看我是否仍然能够像以前一样进行交互。这还不错,它只是片段和ViewPager的基本结构。您希望如何像以前一样与卡片交互?很难准确地说出你在用每张卡做什么。
RecycleServiceWholder
不在你发布的代码中。好吧,你只需要触摸一下,就能隐藏或显示汽车的
保险杠?您可以在片段中轻松处理该问题。您不需要对它进行静态引用。我已经更新了答案,片段现在实现了
View.OnTouchListener
,您可以显示/隐藏保险杠。通过这种方式,你对片段有了更多的控制,你的
Welcome
类不需要知道这些交互,片段可以处理它们。是的,只要把它们放到片段中,你就可以为片段做任何你需要做的事。
public class CarFront extends AppCompatActivity {

    private LinearLayoutManager lLayout;
    public static ImageView fbumper;
    public static ImageView hood;

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

        //remove title/fullscreen
        //requestWindowFeature(Window.FEATURE_NO_TITLE);
        //getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                //WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.activity_car_front);
        setTitle(null);

        List<ItemObject> rowListItem = getAllItemList();
        lLayout = new LinearLayoutManager(CarFront.this);

        RecyclerView rView = (RecyclerView)findViewById(R.id.front_recyclerview);
        rView.setLayoutManager(lLayout);

        RecyclerViewAdapter rcAdapter = new RecyclerViewAdapter(CarFront.this, rowListItem);
        rView.setAdapter(rcAdapter);

        //Selected Images

        fbumper = (ImageView)findViewById(R.id.fbumperselected);
        hood = (ImageView)findViewById(R.id.hoodselected);




    }

    private List<ItemObject> getAllItemList(){

        List<ItemObject> allItems = new ArrayList<ItemObject>();

        allItems.add(new ItemObject("", R.drawable.hood_selected));

        //allItems.add(new ItemObject("", R.drawable.hood_card));


        return allItems;
    }

    public static class ViewHolder extends RecyclerView.ViewHolder
    {

        public ViewHolder(View itemView) {
            super(itemView);
        }
    }



}
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:background="@color/background">

    <android.support.v7.widget.Toolbar
        android:layout_width="fill_parent"
        android:layout_height="45dp"
        android:background="@drawable/top_logo">

    </android.support.v7.widget.Toolbar>

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="200dp">

        <ImageView
            android:id="@+id/carfront"
            android:layout_width="368dp"
            android:layout_height="200dp"
            android:scaleType="fitStart"
            app:srcCompat="@drawable/carfront"
            tools:layout_editor_absoluteY="50dp"
            tools:layout_editor_absoluteX="8dp" />

        <ImageView
            android:id="@+id/hoodselected"
            android:layout_width="368dp"
            android:layout_height="200dp"
            android:scaleType="fitStart"
            app:srcCompat="@drawable/hood_selected"
            tools:layout_editor_absoluteY="50dp"
            tools:layout_editor_absoluteX="8dp"
            android:visibility="invisible"/>


        <ImageView
            android:id="@+id/fbumperselected"
            android:layout_width="368dp"
            android:layout_height="200dp"
            android:scaleType="fitStart"
            app:srcCompat="@drawable/fbumper_selected"
            tools:layout_editor_absoluteY="0dp"
            tools:layout_editor_absoluteX="8dp"
            android:visibility="invisible"/>

    </android.support.constraint.ConstraintLayout>



        <android.support.v7.widget.RecyclerView
            android:id="@+id/front_recyclerview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:scrollbars="none" />


</LinearLayout>
    public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnTouchListener{

    //public TextView countryName;
    public ImageView photo;
    public ImageView fbumper;

    public RecyclerViewHolders(View itemView) {
        super(itemView);
        itemView.setOnTouchListener(this);
        photo = (ImageView)itemView.findViewById(R.id.cardview);
    }

    @Override
    //make a gesture detector
    //make a nice clean graphic after they tap on repair, telling the user how it works
    //pointer = multitouch
    public boolean onTouch(View view, MotionEvent event)
    {
        switch (event.getAction() & MotionEvent.ACTION_MASK)
        {
            case MotionEvent.ACTION_DOWN:
                actionDown();
                break;

            case MotionEvent.ACTION_POINTER_UP:
                actionUp();
                break;
        }

        return true;
    }

    // Method for Down Press
    public void actionDown()
    {
        switch (getAdapterPosition())
        {
            case 0:

                CarFront.fbumper.setVisibility(View.VISIBLE);
                break;

            case 1:
        }

    }
    //Method for Up Press
    public void actionUp()
    {
        switch (getAdapterPosition())
        {
            case 0:

                CarFront.fbumper.setVisibility(View.INVISIBLE);
                //break;

            case 1:
        }
    }


}
public class CarFrontFragment extends Fragment {

    public ImageView bumper; // Do not use static views.
    public ImageView hood;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_car_front, container, false);
    }

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

        // Bind your views.
        RecyclerView list = (RecyclerView) view.findViewById(R.id.front_recyclerview);
        bumper = (ImageView) view.findViewById(R.id.fbumperselected);
        hood = (ImageView) view.findViewById(R.id.hoodselected);

        // Create your layout manager.
        LinearLayoutManager layout = new LinearLayoutManager(getContext());
        list.setLayoutManager(layout);

        // Fetch your items.
        List<ItemObject> rowListItem = getAllItemList();

        // Set your adapter
        RecyclerViewAdapter adapter = new RecyclerViewAdapter(getContext(), rowListItem);
        list.setAdapter(adapter);

    }

    // Creating a new Fragment through newInstance.
    public static CarFrontFragment newInstance() {
        return new CarFrontFragment();
    }


    // Fetching items, passing in the View they will control.
    private List<ItemObject> getAllItemList(){
        List<ItemObject> allItems = new ArrayList<ItemObject>();

        allItems.add(new ItemObject("", R.drawable.hood_selected), hood);
        allItems.add(new ItemObject("", R.drawable.bumped_selected), bumper);

        return allItems;
    }
}
public class PagerAdapter extends FragmentStatePagerAdapter {

    public static final int NUM_OF_PAGES = 2;
    private static final int PAGE_WELCOME = 0;
    private static final int PAGE_CAR_FRONT = 1;

    public PagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case PAGE_WELCOME:
                // Return a new instance of your Fragment.

            case PAGE_CAR_FRONT:
                return CarFrontFragment.newInstance();
        }
        return null;
    }

    @Override
    public int getCount() {
        return NUM_OF_PAGES;
    }
}
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {

    private List<ItemObject> itemList;
    private Context context;

    public RecyclerViewAdapter(Context context, List<ItemObject> itemList) {
        this.itemList = itemList;
        this.context = context;
    }

    @Override
    public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
        View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_view_list, null);
        RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView);
        return rcv;

    }

    @Override
    public void onBindViewHolder(RecyclerViewHolders holder, int position) {
        holder.photo.setImageResource(itemList.get(position).getPhoto());
        // Telling the holder about the View.
        holder.view = itemList.get(position).getView();
    }

    @Override
    public int getItemCount() {
        return itemList.size();
    }
}
public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnTouchListener {

    ImageView photo;
    public View view;

    public RecyclerViewHolders(View itemView) {
        super(itemView);
        itemView.setOnTouchListener(this);
        photo = (ImageView) itemView.findViewById(R.id.cardview);
    }

    @Override
    public boolean onTouch(View view, MotionEvent event) {
        switch (event.getAction() & MotionEvent.ACTION_MASK) {
            case MotionEvent.ACTION_DOWN:
                this.view.setVisibility(View.VISIBLE);
                break;

            case MotionEvent.ACTION_POINTER_UP:
                this.view.setVisibility(View.GONE);
                break;
        }

        return true;
    }

}