В настоящее время я создаю активность в своем приложении, где продукты добавляются с использованием FAB. При нажатии FAB открывается новое всплывающее действие с startActivityForResult, и в нем форма заполняется и отправляется обратно через объект Parcelable.
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что после добавления продукта он не отображается в RecyclerView, но когда я снова нажимаю FAB, во-вторых, я начинаю редактировать любое поле внутри формы (например, любой EditText ) к следующему продукту, я вижу предыдущий, появляющийся на заднем плане позади моей всплывающей формы. Когда я закончу второй продукт, он не появится, пока я не начну редактировать третий и т. Д.
Я просмотрел XML, и мне кажется, что все в порядке ... И попытался прочитать несколько решений (и мой код снова и снова), но ни одно из них не помогло.
Соответствующие фрагменты кода (я положил ... где я пренебрег некоторым кодом, который не имеет отношения к этому случаю):
Из основного вида деятельности (в нем должны быть показаны продукты):
'' '
public class EditOffersActivity extends AppCompatActivity {
...
private ArrayList<Offer> offers_list;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit_products);
offers_list = new ArrayList<>();
...
RecyclerView rvOffers = findViewById(R.id.offers_RecyclerView);
OfferAdapter adapter = new OfferAdapter(offers_list);
rvOffers.setAdapter(adapter);
rvOffers.setLayoutManager( new LinearLayoutManager(this));
// Setting up the FAB so it leads to the Product Details Pop-up
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(EditOffersActivity.this, ProductDetailsPopupActivity.class);
startActivityForResult(intent, HTZ_ADD_OFFER); // HTZ_ADD_OFFER = 1
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
Offer created_offer = data.getParcelableExtra("offer");
offers_list.add(created_offer);
}
}
'' '
Адаптер:
'' '
public class OfferAdapter extends android.support.v7.widget.RecyclerView.Adapter<OfferAdapter.OfferViewholder> {
private ArrayList<Offer> mOffers;
public OfferAdapter(ArrayList<Offer> offers) {
mOffers = offers;
}
@Override
public OfferViewholder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
Context context = viewGroup.getContext();
int layoutIdForListItem = R.layout.item_product;
LayoutInflater inflater = LayoutInflater.from(context);
View view = inflater.inflate(layoutIdForListItem, viewGroup, false);
OfferViewholder viewHolder = new OfferViewholder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(OfferViewholder holder, int position) {
Offer current_offer = mOffers.get(position);
... // a lot of binding code
}
@Override
public int getItemCount() {
return mOffers.size();
}
class OfferViewholder extends RecyclerView.ViewHolder {
TextView name_TextView;
TextView time_TextView;
...
public OfferViewholder(View itemView) {
super(itemView);
// Init all views
name_TextView = itemView.findViewById(R.id.product_item_name_TextView);
time_TextView = itemView.findViewById(R.id.product_item_time_TextView);
...
}
}
}
'' '
И часть всплывающего окна, которое закрывает его после того, как пользователь нажимает «Готово»:
'' '
mPublishButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(p_photo_url == null) {
...
} else {
// Create offer from user input
Offer n_offer = new Offer (...)
);
...
// Return offer to EditOffersActivity
Intent resultIntent = new Intent();
resultIntent.putExtra("offer", n_offer); // Offer is Parcelable
setResult(HTZ_ADD_OFFER, resultIntent);
finish();
}
}
});
'' '
И XML RecyclerView:
<android.support.v7.widget.RecyclerView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/offers_RecyclerView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layoutManager="android.support.v7.widget.LinearLayoutManager"
tools:itemCount="3"
tools:listitem="@layout/item_product"
tools:orientation="vertical"
tools:scrollbars="horizontal"
tools:spanCount="1">