#java #android #android-studio
#java #Android #android-studio
Вопрос:
Привет, у меня проблема с моим приложением. После двойного щелчка по одному из предыдущих элементов он открывается только один раз, но когда я возвращаюсь к выбору логотипа элемента, заголовок и фон исчезают после. Каждый мой макет имеет android:launchMode="singleTop"
в манифесте ограничение на открытие одного и того же элемента. Я должен перезапустить приложение, чтобы вернуть его в нормальное состояние
Код для макета
public class Organizacje extends AppCompatActivity implements OrgCallback {
private RecyclerView rvOrg;
private OrgAdapter orgAdapter;
private List<Org> mdata;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_organizacje);
setTitle("Organizacje ekologiczne");
initViews();
initmdataOrg();
setupOrgAdapter();
}
private void setupOrgAdapter() {
orgAdapter = new OrgAdapter(mdata, this);
rvOrg.setAdapter(orgAdapter);
}
private void initmdataOrg() {
mdata = new ArrayList<>();
mdata.add(new Org(getString(R.string.unep2), getString(R.string.unep_long_desc),R.drawable.unep));
mdata.add(new Org(getString(R.string.ksib2), getString(R.string.ksib_long_desc), R.drawable.ksib));
mdata.add(new Org(getString(R.string.pzfd2), getString(R.string.pzfd_long_desc),R.drawable.pzfd));
}
private void initViews() {
rvOrg = findViewById(R.id.rv_org);
rvOrg.setLayoutManager(new LinearLayoutManager(this));
rvOrg.setHasFixedSize(true);
}
@Override
public void onOrgItemClick(int pos, ImageView imgContainer, ImageView imgLogo, TextView title) {
Intent intent = new Intent(this, OrgDetails.class);
intent.putExtra("orgObject", mdata.get(pos));
Pair<View, String> p1 = Pair.create((View)imgContainer,"containerTN");
Pair<View, String> p2 = Pair.create((View)imgLogo,"logoTN");
Pair<View, String> p3 = Pair.create((View)title,"titleTN");
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(this, p1, p2, p3);
startActivity(intent, optionsCompat.toBundle());
}
}
Код для адаптера
public class OrgAdapter extends RecyclerView.Adapter<OrgAdapter.orgviewholder> {
List<Org> mdata;
OrgCallback callback;
public OrgAdapter(List<Org> mdata, OrgCallback callback) {
this.mdata = mdata;
this.callback = callback;
}
@NonNull
@Override
public orgviewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext())
.inflate(R.layout.item_org, parent, false);
return new orgviewholder(view);
}
@Override
public void onBindViewHolder(@NonNull orgviewholder holder, int position) {
Glide.with(holder.itemView.getContext())
.load(mdata.get(position).getDrawableResource())
.transforms(new CenterCrop(), new RoundedCorners(16))
.into(holder.imgOrg);
holder.title.setText(mdata.get(position).getTitle());
holder.description.setText(mdata.get(position).getDescription());
}
@Override
public int getItemCount() {
return mdata.size();
}
public class orgviewholder extends RecyclerView.ViewHolder {
ImageView imgOrg, imgContainer;
TextView title, description;
public orgviewholder(@NonNull View itemView) {
super(itemView);
this.imgOrg = itemView.findViewById(R.id.item_org_logo);
this.imgContainer = itemView.findViewById(R.id.container_org);
this.title = itemView.findViewById(R.id.item_org_title);
this.description = itemView.findViewById(R.id.item_org_description);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
callback.onOrgItemClick(getAdapterPosition(), imgContainer, imgOrg, title);
}
});
}
}
}
Комментарии:
1. где вы создаете список в своем жизненном цикле?
2. У меня есть макет с одним элементом и другой макет с видом переработки, чтобы составить список этих элементов
3. Я знаю это по вашему изображению. Я имею в виду, что хочу увидеть ваш java-код для проверки make list в вашем жизненном цикле.
4. я отредактировал сообщение с помощью кода
Ответ №1:
попробуйте добавить элемент в onResume();
public class Organizacje extends AppCompatActivity implements OrgCallback {
private RecyclerView rvOrg;
private OrgAdapter orgAdapter;
private List<Org> mdata;
@Override
protected void onResume() {
super.onResume();
initmdataOrg();
setupOrgAdapter();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_organizacje);
setTitle("Organizacje ekologiczne");
initViews();
}
private void setupOrgAdapter() {
orgAdapter = new OrgAdapter(mdata, this);
rvOrg.setAdapter(orgAdapter);
}
private void initmdataOrg() {
mdata = new ArrayList<>();
mdata.add(new Org(getString(R.string.unep2), getString(R.string.unep_long_desc),R.drawable.unep));
mdata.add(new Org(getString(R.string.ksib2), getString(R.string.ksib_long_desc), R.drawable.ksib));
mdata.add(new Org(getString(R.string.pzfd2), getString(R.string.pzfd_long_desc),R.drawable.pzfd));
}
private void initViews() {
rvOrg = findViewById(R.id.rv_org);
rvOrg.setLayoutManager(new LinearLayoutManager(this));
rvOrg.setHasFixedSize(true);
}
@Override
public void onOrgItemClick(int pos, ImageView imgContainer, ImageView imgLogo, TextView title) {
Intent intent = new Intent(this, OrgDetails.class);
intent.putExtra("orgObject", mdata.get(pos));
Pair<View, String> p1 = Pair.create((View)imgContainer,"containerTN");
Pair<View, String> p2 = Pair.create((View)imgLogo,"logoTN");
Pair<View, String> p3 = Pair.create((View)title,"titleTN");
ActivityOptionsCompat optionsCompat = ActivityOptionsCompat.makeSceneTransitionAnimation(this, p1, p2, p3);
startActivity(intent, optionsCompat.toBundle());
}
}
если не работает, пожалуйста, отправьте свой код адаптера.
Комментарии:
1. sry, для предыдущего комментария мое приложение не запустилось, и теперь оно работает, спасибо
2. но теперь, когда я возвращаюсь к своему списку, он продолжает обновляться, и мне приходится прокручивать вниз, где я был раньше