android-fragments 如何将回收器视图添加到片段

hts6caw3  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(197)

我已经尝试了很多方法来添加回收视图内的一个片段。我是新的Android。我的Android有5个片段其中一个片段我需要添加一个回收视图。这里是我的代码

通知项目.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/notification_item_root"
    android:layout_width="match_parent"
    android:layout_height="56dp"
    android:gravity="center_vertical|left"
    android:orientation="horizontal"
    android:paddingLeft="16dp">

    <de.hdodenhof.circleimageview.CircleImageView
        android:id="@+id/notification_item_img"
        android:layout_width="36dp"
        android:layout_height="36dp"
        android:src="@android:drawable/ic_input_get" />

   <TextView
        android:id="@+id/notification_item_text"
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:gravity="center"
        android:paddingLeft="8dp"
        android:text="Test Testre" />

</LinearLayout>

通知片段.xml

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

<android.support.v7.app.AlertController.RecycleListView
    android:id="@+id/notification_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

</LinearLayout>

通知项目.java

public class NotificationItem {
    private String title;
    private int imageResId;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public int getImageResId() {
        return imageResId;
    }

    public void setImageResId(int imageResId) {
        this.imageResId = imageResId;
    }
}

通知数据.java

public class NotificationData {
    private static final String[] textItem = {"pathum", "sai", "charu"};
    private static final int[] imgItem = {android.R.drawable.ic_popup_reminder, android.R.drawable.ic_menu_add, android.R.drawable.ic_menu_delete};

    public static List<NotificationItem> getListData() {
        List<NotificationItem> data = new ArrayList<>();

        for (int x = 0; x < 4; x++) {
            for (int i = 0; i < textItem.length && i < imgItem.length; i++) {
                NotificationItem item = new NotificationItem();
                item.setImageResId(imgItem[i]);
                item.setTitle(textItem[i]);
                data.add(item);
            }
        }

        return data;
    }

}

通知适配器.java

public class NotificationAdapter extends RecyclerView.Adapter<NotificationAdapter.NotificationHolder> {

    private List<NotificationItem> listData;
    private LayoutInflater inflater;

    public NotificationAdapter(List<NotificationItem> listData, Context c) {

        this.inflater = LayoutInflater.from(c);
        this.listData = listData;
    }

    @Override
    public NotificationHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View view = inflater.inflate(R.layout.notification_item,parent,false);
        return new NotificationHolder(view);
    }

    @Override
    public void onBindViewHolder(NotificationHolder holder, int position) {
        NotificationItem item = listData.get(position);
        holder.title.setText(item.getTitle());
        holder.icon.setImageResource(item.getImageResId());
    }

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

    class NotificationHolder extends RecyclerView.ViewHolder {

        private TextView title;
        private CircleImageView icon;
        private View container;

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

            title = (TextView) itemView.findViewById(R.id.notification_item_text);
            icon = (CircleImageView) itemView.findViewById(R.id.notification_item_img);
            container = itemView.findViewById(R.id.notification_item_root);
        }
    }
}

通知片段.java

public class NotificationFragment extends Fragment {

    RecyclerView recyclerView;
    NotificationAdapter notificationAdapter;

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

        View rootView = inflater.inflate(R.layout.notification_fragment, container, false);
    recyclerView = (RecyclerView) rootView.findViewById(R.id.notification_list);

    recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));

    notificationAdapter = new NotificationAdapter(NotificationData.getListData(),this);
    recyclerView.setAdapter(notificationAdapter);

    return rootView;
}

}
我无法在NotificationFragment.javaNotificationAdapter.java中正确地进行此操作,请各位帮帮我。

niwlg2el

niwlg2el1#

您正在为RecyclerView使用错误的类,而不是AlertController。RecyclerListView使用以下类:

<!-- A RecyclerView with some commonly used attributes -->
<android.support.v7.widget.RecyclerView
    android:id="@+id/my_recycler_view"
    android:scrollbars="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"/>

以下是更多信息:
RecyclerView

zy1mlcev

zy1mlcev2#

1)首先将依赖项添加到应用级Gradle文件,然后同步项目

compile 'com.android.support:recyclerview-v7:23.4.0'

2)转到您的布局文件(例如:activity_main.xml)在基本布局中添加recyclerview标记

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     app:layout_behavior="@string/appbar_scrolling_view_behavior"
     tools:context="com.examples.rehan.excluzo.Fragments.OneFragment">

<android.support.v7.widget.RecyclerView
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:scrollbars="vertical"
    android:id="@+id/recycler_view">

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

3)创建一个类model.java并粘贴代码。
public class model{ private字符串名称,性别;

public model() {
}

public model(String name, String gender) {
    this.name= name;
    this.gender= gender;
}

public String getGender() {
    return gender;
}

public void setGender(String gneder) {
    this.gender= gender;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name= name;
}

}
4)在您的布局文件夹item_layout. xml中创建xml文件并粘贴以下代码

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:paddingLeft="16dp"
    android:paddingRight="16dp"
    android:paddingTop="10dp"
    android:paddingBottom="10dp"  >

    <TextView
        android:id="@+id/name"
        android:textColor="@color/title"
        android:textSize="16dp"
        android:textStyle="bold"
        android:layout_alignParentTop="true"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/gender"
        android:layout_below="@id/title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" /> 

</RelativeLayout>

5)您需要创建适配器来将子视图添加到您的列表视图中。因此,请创建一个文件testAdapter.java文件并粘贴此代码。
此处在列表视图中,I将仅具有2个项目(例如:姓名和性别)

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

    private List<model> productList;
    Context context;
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.item_layout, parent, false);

        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(MyViewHolder holder, int position) {
        model product = productList.get(position);
        holder.name.setText(product.getName());
        holder.gender.setText(product.getGender());
    } 

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

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView name,gender;

        public MyViewHolder(View view) {
            super(view);
            name = (TextView) view.findViewById(R.id.name);
            gender = (TextView) view.findViewById(R.id.gender);
        }
    }


    public testAdapter(List<model> productList, Context context) {
        this.productList = productList;
        this.context = context;
    }

}

6)现在后藤您的MainActivity.java并粘贴以下代码

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DefaultItemAnimator;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    private List<modle> movieList = new ArrayList<>();
    private RecyclerView recyclerView;
    private testAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 

        recyclerView = (RecyclerView) findViewById(R.id.recycler_view);

        mAdapter = new testAdapter(movieList);
        RecyclerView.LayoutManager mLayoutManager = new    LinearLayoutManager(getApplicationContext());
        recyclerView.setLayoutManager(mLayoutManager);
        recyclerView.setItemAnimator(new DefaultItemAnimator());
        recyclerView.setAdapter(mAdapter);

        preparedata();
    }

    private void preparedata() {
        model movie = new model("XXX", "Male");
        movieList.add(movie);

       //add the items according to your wish
       //name,gender
       //here i have added all items with same name and gender. you can change it
        model movie = new model("XXX", "Male");
        movieList.add(movie);

        model movie = new model("XXX", "Male");
        movieList.add(movie);

        model movie = new model("XXX", "Male");
        movieList.add(movie);

        model movie = new model("XXX", "Male");
        movieList.add(movie);

        model movie = new model("XXX", "Male");
        movieList.add(movie);

        model movie = new model("XXX", "Male");
        movieList.add(movie);

       mAdapter.notifyDataSetChanged();
    }
}

希望这对你有帮助:)

相关问题