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
.
вы не добавили list.clear() вот почему duplicacy есть –
вызов его в 'OnCreate()' – SripadRaj
список = новый ArrayList <>() ; добавьте эту строку непосредственно перед тем, как получить все данные из базы данных. – Vickyexpert