RecylerView Adapter в неработающем фрагменте - PullRequest
0 голосов
/ 14 января 2020

В моем приложении есть несколько фрагментов в деятельности. Я использовал переработчик в первом действии и настраивал элементы просмотра с помощью адаптера. При нажатии на элемент в списке просмотра открывается другое действие. Теперь проблема в том, что когда я открываю другой фрагмент и нажимаю на его интерфейс, то действие, открываемое адаптером фрагмента 1, также открывается щелчком в любом месте фрагмента 2.

Это мой адаптер

public class ProblematicReportAdapter extends RecyclerView.Adapter<ProblematicReportAdapter.ProblematicReportViewHolder> implements Filterable {

    private List<ProblematicReportItem> exampleList;
    private List<ProblematicReportItem> exampleListFull;
    onClickInterface onClickInterface;
    class ProblematicReportViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
        ImageView imageView;
        TextView textView1;
        TextView textView2;
        String pos;
        ProblematicReportViewHolder(View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.imageView);
            textView1 = itemView.findViewById(R.id.placename);
            textView2 = itemView.findViewById(R.id.placedescription);

            imageView.setOnClickListener(this);
            textView1.setOnClickListener(this);
            textView2.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {
            Intent intent=new Intent(home_Activity, ProblematicReportComplaint.class);
            intent.putExtra("maintenancetype",pos);
            home_Activity.startActivity(intent);
        }
    }
    public ProblematicReportAdapter(List<ProblematicReportItem> exampleList) {
        this.exampleList = exampleList;

        exampleListFull = new ArrayList<>(exampleList);
    }

    @NonNull
    @Override
    public ProblematicReportViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.listview_layout,
                parent, false);
        return new ProblematicReportViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ProblematicReportViewHolder holder, final int position) {
        ProblematicReportItem currentItem = exampleList.get(position);

        holder.imageView.setImageResource(currentItem.getImageResource());
        holder.textView1.setText(currentItem.getText1());
        holder.textView2.setText(currentItem.getText2());

      holder.pos=holder.textView1.getText().toString();
    }

    @Override
    public int getItemCount() {
        return exampleList.size();
    }

Это мой фрагмент кода 1

 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
        recyclerView = (RecyclerView)view.findViewById(R.id.lstvw);
        ProblematicReportItems = new ArrayList<>();
//        onclickInterface = new onClickInterface() {
//            @Override
//            public void setClick(int abc) {
//
//                String title1 = ((TextView) recyclerView.findViewHolderForAdapterPosition(abc).itemView.findViewById(R.id.placename)).getText().toString();
//                adapter.notifyDataSetChanged();
//
//
//            }
//        };
        filllistItems();
        setUpRecyclerView();

    }


    private void filllistItems() {

        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.preventive),home_Activity.getResources().getString(R.string.preventive_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.predicitive),home_Activity.getResources().getString(R.string.predicitive_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.deferred),home_Activity.getResources().getString(R.string.deferred_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Breakdown),home_Activity.getResources().getString(R.string.Breakdown_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Condition),home_Activity.getResources().getString(R.string.Condition_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Corrective),home_Activity.getResources().getString(R.string.Corrective_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Emergency),home_Activity.getResources().getString(R.string.Emergency_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Scheduled),home_Activity.getResources().getString(R.string.Scheduled_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Precision),home_Activity.getResources().getString(R.string.Precision_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Reliability),home_Activity.getResources().getString(R.string.Reliability_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Productive),home_Activity.getResources().getString(R.string.Productive_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Routine),home_Activity.getResources().getString(R.string.Routine_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Planned),home_Activity.getResources().getString(R.string.Planned_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Run),home_Activity.getResources().getString(R.string.Run_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Periodic),home_Activity.getResources().getString(R.string.Periodic_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Proactive),home_Activity.getResources().getString(R.string.Proactive_info)));
        ProblematicReportItems.add(new ProblematicReportItem(R.drawable.ic_toolbox,home_Activity.getResources().getString(R.string.Reactive),home_Activity.getResources().getString(R.string.Reactive_info)));
    }
    private void setUpRecyclerView() {
        recyclerView.setHasFixedSize(true);
        RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(getActivity());
        adapter = new ProblematicReportAdapter(ProblematicReportItems);

        recyclerView.setLayoutManager(layoutManager);
        recyclerView.setAdapter(adapter);
    }

и это действие

  navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                int id = menuItem.getItemId();
                Fragment fragment = null;

                FragmentManager fragmentManager = getFragmentManager();


                if (id == R.id.nav_home) {
                    fragment = new ProblematicReportFragment();


                } else if (id == R.id.nav_gallery) {
                    Toast.makeText(HomeActivity.this, "ok", Toast.LENGTH_SHORT).show();
                }
                else if (id == R.id.nav_history) {

                }
                else if (id == R.id.nav_tools) {
                    fragment = new UserProfileFragment();


                }
                if (fragment != null) {

                    for (Fragment fragments:getSupportFragmentManager().getFragments()) {
                        getSupportFragmentManager().beginTransaction().remove(fragments).commit();
                    }

                    FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
                    transaction.add(R.id.nav_host_fragment,fragment);
                    transaction.commit();
                }

                drawer.closeDrawer(GravityCompat.START);
                return true;
            }
        });

Я не знаю, почему функция onclick в адаптере также работает во фрагменте 2

Ответы [ 3 ]

0 голосов
/ 14 января 2020

вы можете попробовать это вместо этого?

if (fragment != null) {
FragmentTransaction transaction=getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.nav_host_fragment,fragment);
                transaction.commit();
}
0 голосов
/ 14 января 2020

Есть несколько возможностей. Это может происходить из-за совмещения фрагментов. Особенно, когда вновь добавленный фрагмент меньше по высоте, чем последний фрагмент. Используется «match_parent» в высоте фрагментов. И дайте мне знать, если это решит проблему.

0 голосов
/ 14 января 2020

По некоторым причинам кажется, что ваш фрагмент все еще там, даже после того, как вы звоните remove(fragment)

Я бы предложил что-то вроде этого.

FragmentManager fm = getSupportFragmentManager();
 fm.beginTransaction()
          .setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out)
          .show(fragmentToShow)
          .hide(fragmentToHide)
          .commit();
...