2016-09-23 2 views
0

RecyclerView Я имею в Fragment и я заселение ArrayList от Sqlite и есть Form, который позволяет мне добавлять записи в базу данных. Так что пошло бы неправильно?ArrayList Размер Увеличение каждый onCreateView называют

Он отлично работает, пока я не добавлю никаких новых записей, но когда я добавляю новые записи через форму, он перенаправляет обратно на RecyclerView's Fragment, не показывая никаких новых добавленных записей. Когда я снова нажимаю кнопку для добавления записей и возвращаюсь без добавления какой-либо записи в форму, нажав кнопку назад, она показывает новые записи, а также делает копию предыдущих записей. Я не знаю, где я ошибаюсь, и я уже пробовал все, чтобы решить, но не смог пройти через это.

Вот мой fragment где я RecyclerView

public class fragment_1 extends Fragment { 

    CRUD_database db; 
    SQLiteDatabase sqLiteDatabase; 
    RecyclerView mRecyclerView; 
    RecyclerView.Adapter adapter; 
    RecyclerView.LayoutManager layoutManager; 
    static List<PPL_list_wrapper> Loc_details=new ArrayList<PPL_list_wrapper>(); 
    FloatingActionButton fab; 
    PPL_list_wrapper PPL_wrapper; 
    int ID; 
    ArrayList<PPL_list_wrapper> list=new ArrayList<>(); 
    public static final String TAG="====Fragment_1===="; 
    String name,title,address,passing_year,description; 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     // Inflate the layout for this fragment 
     View view=inflater.inflate(R.layout.fragment_fragment_1, container, false); 
     TextView textView= (TextView) view.findViewById(R.id.listNULL); 
     mRecyclerView= (RecyclerView) view.findViewById(R.id.ppl_RecyclerView); 
     layoutManager=new LinearLayoutManager(getActivity()); 
     mRecyclerView.setLayoutManager(layoutManager); 
     adapter=new ppl_Recycler_Adapter(getActivity(),list); 
     mRecyclerView.setAdapter(adapter); 


     fab= (FloatingActionButton) view.findViewById(R.id.PPL_fab_Add_PPL); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       FragmentTransaction fragmentTransaction=getFragmentManager().beginTransaction(); 
       Add_PPL add_ppl=new Add_PPL(); //This Fragment Has Form To Add Entry into Database 
       fragmentTransaction.replace(R.id.Navigation_Main_Layout,add_ppl); 
       fragmentTransaction.addToBackStack(null); 
       fragmentTransaction.commit(); 
      } 
     }); 

     Log.d(TAG,"Value of Context Oncreate "+" Value of GetActivity"+" "+getActivity()); 
     db=new CRUD_database(getActivity()); 
     Cursor cursor=db.getALL_PPL(); 
      Log.d(TAG,"Cursor Position To First :"+cursor.moveToFirst()); 
      Log.d(TAG,"Cursor and List Value :"+"Cursor: "+cursor.getCount()+" "+"List: "+list.size()); 
      if (cursor.moveToFirst()&& !(list.size()==cursor.getCount())){ // This Condition to avoid Array to increase its size as soon as database has new row it will call 
       do{ 

         Log.d(TAG,"Cursor Position: "+cursor.getColumnCount()+" "+"Value of Rows "+cursor.getCount()); 
         ID=cursor.getInt(cursor.getColumnIndex("_ID")); 
         name=cursor.getString(cursor.getColumnIndex("PPL_NAME")); 
         title=cursor.getString(cursor.getColumnIndex("PPL_TITLE")); 
         address=cursor.getString(cursor.getColumnIndex("PPL_ADDRESS")); 
         passing_year=cursor.getString(cursor.getColumnIndex("PPL_TIME")); 
         description=cursor.getString(cursor.getColumnIndex("PPL_DESCRIPTION")); 

         Log.d(TAG,title+" "+address+" "+ passing_year+" "+description+" "+ID); 
         PPL_list_wrapper fromDatabase=new PPL_list_wrapper(ID,title,name,passing_year,address); 
         list.add(fromDatabase); 
         adapter=new ppl_Recycler_Adapter(getActivity(),list); 
         // adapter.notifyItemChanged(cursor.getCount()); 

       } 
       while (cursor.moveToNext()); 
       adapter.notifyItemChanged(cursor.getCount()); 
       cursor.close(); 
      } 
     else if (cursor.getColumnCount()==0 || list.size()==0){ 
       textView.setText("NO RECORD FOUND"); 
      } 

     return view; 
    } 

Так что мой вопрос заключается в том, что, как я могу избежать Arraylist, чтобы увеличить его размер после возвращения в RecyclerView Fragment от формы Fragment?

И как я могу получить полные строки из базы данных всякий раз, когда вызывается RecyclerView Fragment's onCreateView.

+0

вы не добавили list.clear() вот почему duplicacy есть –

+0

вызов его в 'OnCreate()' – SripadRaj

+0

список = новый ArrayList <>() ; добавьте эту строку непосредственно перед тем, как получить все данные из базы данных. – Vickyexpert

ответ

0

добавить

list.clear(); 

после получения курсор из БД.

+0

. Лучший способ заполнить список, потому что он будет вызывать каждый раз. RecyclerView Fragment calls (onCreateView) Первый список очистится, а затем вернет записи обратно. Могу ли я добавить только одну запись (Новая запись), которая просто добавляется по форме – Ritu

+0

да. Вы можете проверить это. –

+0

Thx это помогает, но все же один вопрос в моем уме был бы лучшим способом заполнить arraylist cuz clear и add будет вызывать несколько раз в каждом onCreateView – Ritu

0

вы должны инициализировать в OnCreateView

list=new ArrayList<>(); 
+0

как он решит вопрос? – androidXP

+0

он будет создавать новый arraylist всякий раз, когда Fragment's onCreateView вызывается каждый раз. –

Смежные вопросы