В моем HomeActivity у меня есть ButtonNavigationView с 4 элементами с фрагментами, в одном из них (фрагментах) у меня есть кнопка, которая добавляет динамические виды в линейный макет, и я хочу, чтобы они не исчезали при переходе на другую вкладку в ButtonNavigationView
Как видно на первом изображении, я добавил несколько динамических видов, нажимая на кнопки.
а затем во втором изображении я переключился на другую вкладку на ButtonNavigationView
после этого в третьем изображении, когда я возвращаюсь на вторую вкладку, все динамически генерируемые представления исчезают, что я могу сделать, чтобы сохранить их?
HomeActivity
private TextView mTextMessage;
private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener
= new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
switch (item.getItemId()) {
case R.id.navigation_home:
selectedFragment = new FactorsFragment();
break;
case R.id.navigation_dashboard:
selectedFragment = new NewFactorFragment();
break;
case R.id.navigation_notifications:
selectedFragment = new ProductsFragment();
break;
case R.id.navigation_checklist:
selectedFragment = new CheckList();
break;
}
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,selectedFragment).commit();
return true;
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
BottomNavigationView navigation = (BottomNavigationView) findViewById(R.id.navigation);
navigation.setOnNavigationItemSelectedListener(mOnNavigationItemSelectedListener);
navigation.setSelectedItemId(R.id.navigation_dashboard);
SQLiteStudioService.instance().start(this);
getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,new NewFactorFragment());
}
@Override
protected void onDestroy() {
SQLiteStudioService.instance().stop();
super.onDestroy();
}
Фрагмент, который мне нужен для сохранения изменений
public View onCreateView(@NonNull final LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_newfactor, container, false);
ln = v.findViewById(R.id.itemsContainer);
submit = v.findViewById(R.id.submit);
editText2 = v.findViewById(R.id.customerName);
setRetainInstance(true);
dbConnector = new DbConnector(getContext(), null, null, 1);
Cursor c = dbConnector.get().rawQuery("SELECT * FROM categories", null);
while (c.moveToNext()) {
final int id = c.getInt(c.getColumnIndex("id"));
String name = c.getString(c.getColumnIndex("name"));
final View rowView = inflater.inflate(R.layout.field_button, null);
Button fieldCreator = rowView.findViewById(R.id.fieldCreator);
fieldContainer = rowView.findViewById(R.id.field_container);
fieldCreator.setText(name);
fieldCreator.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LinearLayout fieldContainer = ((RelativeLayout) v.getParent()).findViewById(R.id.field_container);
fieldContainer.removeAllViews();
final Cursor c = dbConnector.get().rawQuery("SELECT * FROM product WHERE category_id = " + id, null);
while (c.moveToNext()) {
final View rowView = inflater.inflate(R.layout.field, null);
TextView productName = rowView.findViewById(R.id.product_name);
final EditText editText = rowView.findViewById(R.id.number);
Button add = rowView.findViewById(R.id.add);
Button remove = rowView.findViewById(R.id.remove);
final TextView productPrice = rowView.findViewById(R.id.product_price);
productName.setText(c.getString(c.getColumnIndex("name")));
final int price_db = Integer.parseInt(c.getString(c.getColumnIndex("price")));
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
if (!editText.getText().toString().equals("")) {
int price = Integer.parseInt(editText.getText().toString()) * price_db;
productPrice.setText(price + "");
}
}
});
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int num = Integer.parseInt(editText.getText().toString());
int num_num = num + 1;
editText.setText(num_num + "");
}
});
remove.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int num = Integer.parseInt(editText.getText().toString());
if (num > 0) {
int num_num = num - 1;
editText.setText(num_num + "");
}
}
});
fieldContainer.addView(rowView);
}
}
});
ln.addView(rowView);
}
submit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < ln.getChildCount(); i++) {
RelativeLayout button = (RelativeLayout) ln.getChildAt(i);
LinearLayout itemCon = (LinearLayout) button.getChildAt(1);
for (int o = 0; o < itemCon.getChildCount(); o++) {
JSONObject jsonObject = new JSONObject();
LinearLayout field = (LinearLayout) itemCon.getChildAt(o);
EditText number = (EditText) field.getChildAt(2);
TextView price = (TextView) field.getChildAt(0);
TextView name = (TextView) field.getChildAt(3);
if (!number.getText().toString().equals("0")) {
try {
jsonObject.put("product_name", name.getText());
jsonObject.put("number", number.getText());
jsonObject.put("price", price.getText());
jsonObject.put("buyer_name",editText2.getEditText().getText().toString());
} catch (JSONException e) {
}
}
jsonArray.put(jsonObject);
}
}
ContentValues values = new ContentValues();
values.put("name",editText2.getEditText().getText().toString());
values.put("items",jsonArray.toString());
Log.e("JSONobject",jsonArray.toString());
try {
long id = dbConnector.get().insert("factors",null,values);
}catch (SQLiteException exception){
Log.e("ERROR",exception.getMessage());
}
}
});
return v;
}