Как я могу ограничить двойной щелчок по элементу

#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. но теперь, когда я возвращаюсь к своему списку, он продолжает обновляться, и мне приходится прокручивать вниз, где я был раньше