Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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
Android recyclerview在每个活动创建中添加重复元素_Android_Android Recyclerview_Android Cardview - Fatal编程技术网

Android recyclerview在每个活动创建中添加重复元素

Android recyclerview在每个活动创建中添加重复元素,android,android-recyclerview,android-cardview,Android,Android Recyclerview,Android Cardview,当我从导航抽屉中启动一个新片段时,它意味着把我带到一个主页,其中有一个匹配配置文件的cardView。第一次就很好用,我想展示的每个个人资料都在那里。但是,当我离开片段,然后再次单击它时,元素会被复制,并且每次后续刷新页面时,项目都会再次复制。我相信这个问题存在于我的RecyclerView适配器的某个地方,在创建活动时没有清除,但我一直无法确定它。这是我的片段类 public class HomeFragment extends Fragment { private CustomLis

当我从导航抽屉中启动一个新片段时,它意味着把我带到一个主页,其中有一个匹配配置文件的cardView。第一次就很好用,我想展示的每个个人资料都在那里。但是,当我离开片段,然后再次单击它时,元素会被复制,并且每次后续刷新页面时,项目都会再次复制。我相信这个问题存在于我的RecyclerView适配器的某个地方,在创建活动时没有清除,但我一直无法确定它。这是我的片段类

public class HomeFragment extends Fragment {
    private CustomListAdapter listAdapter;
    private static final String profileUrl = "http://10.0.2.2:3000/apip/buyers/profiles";
    private static final String TAG = selectBuyerProfile.class.getSimpleName();
    private ProgressDialog pDialog;
    private ListView listView;
    private List<BuyerProfile> buyersProfiles = new ArrayList<BuyerProfile>();
    private View root;
    //private RVAdapter recyclerAdapter;

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

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        RecyclerView rv = (RecyclerView) getActivity().findViewById(R.id.rv);
        //rv.addItemDecoration(new DividerItemDecoration(getActivity(), DividerItemDecoration.VERTICAL_LIST));
        rv.setHasFixedSize(true);
        LinearLayoutManager llm = new LinearLayoutManager(getActivity());
        rv.setLayoutManager(llm);
        rv.setItemAnimator(new DefaultItemAnimator());
        final RVAdapter recyclerAdapter = new RVAdapter(buyersProfiles);
        rv.setAdapter(recyclerAdapter);

        RequestQueue mRequestQueue;

        Cache cache = new DiskBasedCache(getActivity().getCacheDir(), 1024 * 1024);

        Network network = new BasicNetwork(new HurlStack());
        mRequestQueue = new RequestQueue(cache, network);
        mRequestQueue.start();


        JsonArrayRequest profileRequest = new JsonArrayRequest(profileUrl,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        // Parsing json
                        for(int i = 0; i < response.length(); i++) {
                            try {
                                JSONObject obj = response.getJSONObject(i);
                                BuyerProfile parsedProfile = new BuyerProfile();
                                parsedProfile.setBuyerProfTitle(obj.getString("title"));
                                parsedProfile.setDescription(obj.getString("description"));
                                parsedProfile.setLocations(obj.getString("locations"));
                                parsedProfile.setAssetTypes(obj.getString("asset_type"));
                                parsedProfile.setPropertyStatuses(obj.getString("property_status"));
                                //parsedProfile.setBuyerId("Select");
                                buyersProfiles.add(parsedProfile);
                            } catch (Exception e) {
                                e.printStackTrace();
                            }
                        }
                        recyclerAdapter.notifyDataSetChanged();
                        // notifying list adapter about data changes
                        // so that it renders the list view with updated data
                        //hidePDialog();
                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                //Toast.makeText(selectBuyerProfile.this,"Error",Toast.LENGTH_LONG).show();

            }
        });
        mRequestQueue.add(profileRequest);

    }
}
公共类HomeFragment扩展了片段{
私有CustomListAdapter-listAdapter;
私有静态最终字符串配置文件URL=”http://10.0.2.2:3000/apip/buyers/profiles";
private static final String TAG=selectBuyerProfile.class.getSimpleName();
私人对话;
私有列表视图列表视图;
private List buyersProfiles=new ArrayList();
私有视图根;
//私人适配器回收器适配器;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
根=充气机。充气(R.layout.fragment\u home,container,false);
返回根;
}
@凌驾
已创建ActivityState上的公共无效(Bundle savedInstanceState){
super.onActivityCreated(savedInstanceState);
RecyclerView rv=(RecyclerView)getActivity().findViewById(R.id.rv);
//添加装饰(新的DividerItemDecoration(getActivity(),DividerItemDecoration.VERTICAL_LIST));
rv.setHasFixedSize(真);
LinearLayoutManager llm=新的LinearLayoutManager(getActivity());
rv.setLayoutManager(llm);
rv.setItemAnimator(新的DefaultItemAnimator());
最终RVAdapter recyclerAdapter=新RVAdapter(买方档案);
rv.设置适配器(回收适配器);
请求队列mRequestQueue;
缓存=新的DiskBasedCache(getActivity().getCacheDir(),1024*1024);
网络=新的基本网络(new HurlStack());
mRequestQueue=新请求队列(缓存、网络);
mRequestQueue.start();
JsonArrayRequest profileRequest=新的JsonArrayRequest(profileUrl,
新的Response.Listener(){
@凌驾
公共void onResponse(JSONArray响应){
//解析json
对于(int i=0;i
这是我的RVAdapter课程

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PersonViewHolder> {

    private Activity activity;
    private LayoutInflater inflater;
    private List<BuyerProfile> profileItems;
    private static boolean itemFavorited;

    RVAdapter(List<BuyerProfile> profiles) {
        this.profileItems = profiles;
    }

    public static class PersonViewHolder extends RecyclerView.ViewHolder {
        TextView name;
        TextView description;
        TextView locations;
        TextView id;
        TextView investmentRangeMin;
        TextView investmentRangeMax;
        TextView assetTypes;
        TextView propertyStatuses;
        ImageView favoriteButton;
        CardView cardView;
        PersonViewHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(R.id.titleText);
            description = (TextView) itemView.findViewById(R.id.descriptionText);
            investmentRangeMin = (TextView) itemView.findViewById(R.id.investmentRangeMin);
            investmentRangeMax = (TextView) itemView.findViewById(R.id.investmentRangeMax);
            locations = (TextView) itemView.findViewById(R.id.locations);
            id = (TextView) itemView.findViewById(R.id.profileNumber);
            assetTypes = (TextView) itemView.findViewById(R.id.assetTypes);
            propertyStatuses = (TextView) itemView.findViewById(R.id.propertyStatuses);
            favoriteButton = (ImageView) itemView.findViewById(R.id.favorite_select);
            cardView = (CardView) itemView.findViewById(R.id.cv);
            //User selects favorite on a matched profile
            itemFavorited = false;
            favoriteButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(!itemFavorited) {
                        favoriteButton.setImageResource(R.drawable.ic_favorite);
                        //cardView.setCardBackgroundColor(R.color.colorPrimary);
                        itemFavorited = true;
                    } else {
                        favoriteButton.setImageResource(R.drawable.ic_favorite_border);
                        itemFavorited = false;
                    }
                }
            });
        }
    }

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

    @Override
    public PersonViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
        PersonViewHolder pvh = new PersonViewHolder(v);
        return pvh;
    }

    @Override
    public void onBindViewHolder(PersonViewHolder personViewHolder, int i) {
        personViewHolder.name.setText(profileItems.get(i).getBuyerProfTitle());
        personViewHolder.description.setText(profileItems.get(i).getDescription());
        personViewHolder.locations.setText(profileItems.get(i).getLocations());
        personViewHolder.assetTypes.setText(profileItems.get(i).getAssetTypes());
        personViewHolder.propertyStatuses.setText(profileItems.get(i).getPropertyStatuses());
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

    /*
    @Override
    public Object getItem(int location) {
        return profileItems.get(location);
    }
    */

    @Override
    public long getItemId(int position) {
        return position;
    }

}
公共类RVAdapter扩展了RecyclerView.Adapter{ 私人活动; 私人充气机; 私人物品清单; 私有静态布尔项优先; RVAdapter(列表配置文件){ this.profileItems=配置文件; } 公共静态类PersonViewHolder扩展了RecyclerView.ViewHolder{ 文本视图名称; 文本视图描述; 文本视图位置; 文本视图id; TextView investmentRangeMin; TextView investmentRangeMax; TextView资产类型; TextView属性状态; ImageView收藏夹按钮; 卡德维尤; PersonViewHolder(查看项目视图){ 超级(项目视图); name=(TextView)itemView.findViewById(R.id.titleText); description=(TextView)itemView.findViewById(R.id.descriptionText); investmentRangeMin=(TextView)itemView.findViewById(R.id.investmentRangeMin); investmentRangeMax=(TextView)itemView.findViewById(R.id.investmentRangeMax); locations=(TextView)itemView.findViewById(R.id.locations); id=(TextView)itemView.findViewById(R.id.profileNumber); assetTypes=(TextView)itemView.findViewById(R.id.assetTypes); PropertyStates=(TextView)itemView.findViewById(R.id.PropertyStates); favoriteButton=(ImageView)itemView.findViewById(R.id.favorite\u选择); cardView=(cardView)itemView.findViewById(R.id.cv); //用户在匹配的配置文件中选择收藏夹 itemFavorited=false; favoriteButton.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ 如果(!itemFavorited){ favoriteButton.setImageResource(R.drawable.ic_-favorite); //
<?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="wrap_content"
              xmlns:card_view="http://schemas.android.com/apk/res-auto"
              android:padding="0dp"
    >
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="8dp"
                >
                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:text="Matches"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentEnd="false"
                    android:id="@+id/matchesText"
                    android:textAlignment="center"
                    android:textSize="20dp"
                    android:textColor="@color/navigationBarColor"
                    android:layout_alignParentStart="false"
                    android:layout_alignParentBottom="false"
                    android:layout_alignParentLeft="false"
                    android:layout_alignParentRight="true"/>

                    <android.support.v7.widget.RecyclerView
                        android:layout_width="match_parent"
                        android:layout_height="match_parent"
                        android:id="@+id/rv"
                        android:layout_below="@id/matchesText"
                        />
                        <!-- Thumbnail Image -->
                        <ImageView
                            android:id="@+id/imgBillionaire"
                            android:src="@drawable/ic_perm_identity"
                            android:layout_width="80dp"
                            android:layout_height="80dp"
                            android:layout_alignParentLeft="true"
                            android:layout_marginRight="8dp"
                            android:layout_alignParentEnd="false"
                            android:layout_alignParentStart="true"
                            android:nestedScrollingEnabled="false"
                            android:visibility="invisible"/>

                        <!-- Name of Asset -->
                        <TextView
                            android:id="@+id/titleText"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignTop="@+id/imgBillionaire"
                            android:layout_toRightOf="@+id/imgBillionaire"
                            android:textSize="@dimen/Title"
                            android:textStyle="bold" />

                        <!-- Description -->
                        <TextView
                            android:id="@+id/descriptionText"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:layout_below="@id/titleText"
                            android:layout_marginTop="1dip"
                            android:layout_toRightOf="@+id/imgBillionaire"
                            android:textSize="@dimen/Description" />

                        <!-- Source -->
                        <TextView
                            android:id="@+id/locations"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:layout_below="@id/descriptionText"
                            android:layout_marginTop="5dp"
                            android:layout_toRightOf="@+id/imgBillionaire"
                            android:textColor="@color/wealthsource"
                            android:textSize="@dimen/InvestmentRange" />

                        <!-- Source -->
                        <TextView
                            android:id="@+id/assetTypes"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:layout_below="@id/locations"
                            android:layout_marginTop="5dp"
                            android:layout_toRightOf="@+id/imgBillionaire"
                            android:textColor="@color/wealthsource"
                            android:textSize="@dimen/InvestmentRange" />

                        <!-- Source -->
                        <TextView
                            android:id="@+id/propertyStatuses"
                            android:layout_width="fill_parent"
                            android:layout_height="wrap_content"
                            android:layout_below="@id/assetTypes"
                            android:layout_marginTop="5dp"
                            android:layout_toRightOf="@+id/imgBillionaire"
                            android:textColor="@color/wealthsource"
                            android:textSize="@dimen/InvestmentRange" />

                        <!-- Year -->
                        <TextView
                            android:id="@+id/profileNumber"
                            android:layout_width="wrap_content"
                            android:layout_height="wrap_content"
                            android:layout_alignParentBottom="false"
                            android:layout_alignParentRight="true"
                            android:textColor="@color/year"
                            android:textSize="@dimen/Date" />
            </RelativeLayout>


</LinearLayout>
onPause() -> onStop() -> onDestroyView()
onCreateView() -> onActivityCreated() -> onStart() -> onResume()
buyersProfiles = new ArrayList<BuyerProfile>();