0

두 항목이있는 recyclerview가 있습니다. 누군가가 Main Fragment의 항목을 클릭하면 sharedpreferences에 저장되고 클릭 된 모든 항목이 다른 단편에 표시됩니다. 내 문제는 누군가가 항목을 클릭하면 첫 번째 클릭 된 항목 만 항목 목록 대신 다른 조각 (세부 정보 단편)에 표시됩니다. 공유 환경 설정에 저장된 항목 목록 표시

는 검색하고 내가 클릭 된 항목을 저장하고 어떻게 이것은 내 SessionManager.class

public void saveitems(Context context,List<SingleItem> items){ 

     Gson gson = new Gson(); 
     String cartitems = gson.toJson(items); 
     editor.putString(KEY_ITEMS,cartitems); 
     editor.commit(); 
    } 

    public void grandtotal (String total){ 
     editor.putString(KEY_TOTAL,total); 
     editor.commit(); 
    } 

    public void savetocart(Context context, SingleItem singleitems){ 
     List<SingleItem> itemList = getItems(context); 

     if (itemList == null) { 

       itemList = new ArrayList<>(); 
       itemList.add(singleitems); 
       saveitems(context, itemList); 

     } 

    } 

    public ArrayList<SingleItem> getItems(Context context){ 
     List<SingleItem> items; 

     if (pref.contains(KEY_ITEMS)){ 
      String cartitems = pref.getString(KEY_ITEMS,null); 
      Gson gson = new Gson(); 
      SingleItem[] singleItems = gson.fromJson(cartitems,SingleItem[].class); 

      items = Arrays.asList(singleItems); 
      items = new ArrayList<>(items); 

     } 
     else 
      return null; 

     return (ArrayList<SingleItem>) items; 
    } 

    public void removeitem(Context context, SingleItem singleItem){ 
     ArrayList<SingleItem> items = getItems(context); 

     if (items != null){ 
      items.remove(singleItem); 
      saveitems(context,items); 
     } 
    } 

의 항목을 제거 절약의 방법이 있습니다. (RecyclerItems) 살펴보기 :

package com.carlton.shop; 


import android.app.ProgressDialog; 
import android.os.Bundle; 
import android.support.v4.app.Fragment; 
import android.support.v7.app.AlertDialog; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.TextView; 
import android.widget.Toast; 


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

import es.dmoral.toasty.Toasty; 
import retrofit2.Call; 
import retrofit2.Callback; 
import retrofit2.Response; 
import retrofit2.Retrofit; 
import retrofit2.converter.gson.GsonConverterFactory; 
import ss.com.bannerslider.banners.RemoteBanner; 
import ss.com.bannerslider.views.BannerSlider; 



/** 
* A simple {@link Fragment} subclass. 
*/ 
public class MainFragment extends Fragment { 
    private BannerSlider bannerSlider; 
    private RecyclerView Categories; 
    public RecyclerView RecyclerItems; 
    private ShopItemAdapter adapter; 
    private List<ShopItem> item; 
    SessionManager sessionManager; 
    private List<SingleItem> items; 
    private SingleItemAdapter adapters; 
    private LinearLayout Layoutcategories, Layoutitems; 
    private TextView CatName; 
    private Button Up; 


    public MainFragment() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_main, container, false); 

     bannerSlider = (BannerSlider) view.findViewById(R.id.banner_slider1); 
     Categories = (RecyclerView) view.findViewById(R.id.recyclercategories); 
     Layoutcategories = (LinearLayout) view.findViewById(R.id.LayoutCategories); 
     Layoutitems = (LinearLayout) view.findViewById(R.id.LayoutItems); 
     RecyclerItems = (RecyclerView) view.findViewById(R.id.recycleritems); 
     CatName = (TextView) view.findViewById(R.id.tvcategoryname); 
     Up = (Button) view.findViewById(R.id.btnup); 

     sessionManager = new SessionManager(getContext()); 

     Categories.setHasFixedSize(true); 
     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext()); 
     Categories.setLayoutManager(layoutManager); 

     RecyclerItems.setHasFixedSize(true); 
     RecyclerView.LayoutManager layoutmanager = new LinearLayoutManager(getContext()); 
     RecyclerItems.setLayoutManager(layoutmanager); 

     Categories.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, final int position, long id) { 

       Layoutcategories.setVisibility(View.GONE); 
       Layoutitems.setVisibility(View.VISIBLE); 

       sessionManager.createcategorysession(item.get(position).getCategory()); 
       HashMap<String, String> cat = sessionManager.getcategoryitems(); 

       CatName.setText(cat.get(SessionManager.KEY_CATEGORY)); 

       Up.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         Layoutitems.setVisibility(View.GONE); 
         Layoutcategories.setVisibility(View.VISIBLE); 
        } 
       }); 


       items = new ArrayList<>(item.get(position).getItems()); 
       adapters = new SingleItemAdapter(getContext(),items); 
       RecyclerItems.setAdapter(adapters); 
       RecyclerItems.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new AdapterView.OnItemClickListener() { 
        @Override 
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

          sessionManager.savetocart(getContext(), items.get(position)); 
          Toasty.success(getContext(),"Added to cart",Toast.LENGTH_SHORT,true).show(); 


        } 

       })); 

      } 
     })); 


     Banner(); 

     getdata(); 

     return view; 
    } 


    private void Banner() { 
     bannerSlider.addBanner(new RemoteBanner("http://supa.swagshop.co.ke/Images/moto.png")); 
     bannerSlider.addBanner(new RemoteBanner("http://supa.swagshop.co.ke/Images/moto.png")); 
     bannerSlider.addBanner(new RemoteBanner("http://supa.swagshop.co.ke/Images/moto.png")); 
     bannerSlider.addBanner(new RemoteBanner("http://supa.swagshop.co.ke/Images/moto.png")); 

    } 


    private void getdata() { 
     final ProgressDialog progressDialog = new ProgressDialog(getContext()); 
     progressDialog.setMessage("Loading Items..."); 
     progressDialog.show(); 

     Retrofit retrofit = new Retrofit.Builder() 
       .baseUrl(Constants.BASE_URL) 
       .addConverterFactory(GsonConverterFactory.create()) 
       .build(); 

     InterfaceRequest request = retrofit.create(InterfaceRequest.class); 
     Call<JSONResponse> call =request.getJSON(); 
     call.enqueue(new Callback<JSONResponse>() { 
      @Override 
      public void onResponse(Call<JSONResponse> call, Response<JSONResponse> response) { 

       if (response.isSuccessful()){ 

        JSONResponse jsonResponse = response.body(); 

        item = new ArrayList<>(jsonResponse.getItem()); 
        adapter = new ShopItemAdapter(getContext(),item); 
        Categories.setAdapter(adapter); 

       } else { 
        Toasty.warning(getContext(),"Oops! Items could not be loaded",Toast.LENGTH_SHORT,true).show(); 
       } 
       progressDialog.dismiss(); 
      } 

      @Override 
      public void onFailure(Call<JSONResponse> call, Throwable t) { 
       Toasty.error(getContext(),t.getLocalizedMessage(),Toast.LENGTH_SHORT,true).show(); 
       Log.d(Constants.TAG,t.getMessage()); 
       progressDialog.dismiss(); 
      } 

     }); 

    } 

} 

이것은 내가 DetailsFragment의 항목을 가져 오는 방법입니다.

package com.carlton.shop; 


import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.graphics.Canvas; 
import android.graphics.Color; 
import android.graphics.Paint; 
import android.graphics.RectF; 
import android.os.Bundle; 
import android.support.design.widget.FloatingActionButton; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v7.widget.LinearLayoutManager; 
import android.support.v7.widget.RecyclerView; 
import android.support.v7.widget.helper.ItemTouchHelper; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.CheckBox; 
import android.widget.TextView; 
import android.widget.Toast; 

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

import es.dmoral.toasty.Toasty; 

import static com.helpshift.util.HelpshiftContext.getApplicationContext; 


/** 
* A simple {@link Fragment} subclass. 
*/ 
public class Details extends Fragment { 
    private RecyclerView RecyclerDetails; 
    private TextView CartPrice; 
    private CheckBox CheckCart; 

    private List<SingleItem> list; 
    private CartAdapter adapter; 
    private boolean add = false; 
    private Paint p = new Paint(); 
    private SessionManager sessionManager; 



    public Details() { 
     // Required empty public constructor 
    } 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view = inflater.inflate(R.layout.fragment_details, container, false); 

     RecyclerDetails = (RecyclerView) view.findViewById(R.id.recyclercart); 
     CartPrice = (TextView) view.findViewById(R.id.tvcart); 
     CheckCart = (CheckBox) view.findViewById(R.id.chkcart); 

     sessionManager = new SessionManager(getContext()); 

     RecyclerDetails.setHasFixedSize(true); 
     RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getContext()); 
     RecyclerDetails.setLayoutManager(layoutManager); 
     list = sessionManager.getItems(getContext()); 

     RecyclerDetails.addOnItemTouchListener(new RecyclerItemClickListener(getContext(), new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 

      } 
     })); 



     if(list != null){ 
      Toasty.info(getContext(),"Swipe to go to Next", Toast.LENGTH_LONG,true).show(); 
      adapter = new CartAdapter(getContext(),list); 
      RecyclerDetails.setAdapter(adapter); 
      } 

     //initswipe(); 
     return view; 
    } 
} 

답변

0

세션 관리자에서 savetocart() 메소드를 사용하는 것이 올바르지 않습니다. 예상대로

그것이라고 처음으로, getItems()사실에 해결됩니다 다음 줄에, 그러므로 if 문을 null을 반환하고 항목이 추가됩니다. 그러나 그 후 itemList은 null이 아니므로 문은 항상 false으로 해결되며 항목이 목록에 추가되지 않습니다.

방법이

public void savetocart(Context context, SingleItem singleitems){ 
    List<SingleItem> itemList = getItems(context); 

    if (itemList == null) { 
     itemList = new ArrayList<>(); 
    } 
    itemList.add(singleitems); 
    saveitems(context, itemList); 

} 
같이해야
관련 문제