adaptor.setOnClickItemListener ((ImageAdapter.OnItemClickListener) getActivity ()); этот код генерирует ошибку, и я не могу решить ошибку - PullRequest
1 голос
/ 24 января 2020

adapter.setOnClickItemListener ((ImageAdapter.OnItemClickListener) getActivity ()); эта строка генерирует ошибку, и мой уровень знаний об этой ошибке достаточно низкий. оба обязательных файла java и подробные ошибки приведены после этих двух java файлов.


ImageAdapter. java

package com.example.login;

import android.content.Context;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

import com.squareup.picasso.Picasso;

import java.util.List;

public class ImageAdapter extends RecyclerView.Adapter<ImageAdapter.ImageViewHolder> {

    private Context Context;
    private List<Upload> Uploads;
    private OnItemClickListener Listener;


    public ImageAdapter (Context context, List<Upload> uploads1){
        Context = context;
        Uploads = uploads1;
    }
    @NonNull
    @Override
    public ImageViewHolder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
        View v= LayoutInflater.from(Context).inflate(R.layout.image_item, parent, false);
        return new ImageViewHolder(v);
    }

    @Override
    public void onBindViewHolder(@NonNull ImageViewHolder holder,int position) {
        Upload uploadCurrent= Uploads.get(position);
        holder.textViewName.setText(uploadCurrent.getName());
        Picasso.with(Context)
                .load(uploadCurrent.getImageUrl())
                .placeholder(R.drawable.logo)
                .fit()
                .centerInside()
                .into(holder.imageView);
    }

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

    public class ImageViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener,
            View.OnCreateContextMenuListener, MenuItem.OnMenuItemClickListener {

        public TextView textViewName;
        public ImageView imageView;

        public ImageViewHolder(@NonNull View itemView) {
            super(itemView);
            textViewName = itemView.findViewById(R.id.text_product_name);
            imageView = itemView.findViewById(R.id.product_image);

            itemView.setOnClickListener(this);
            itemView.setOnCreateContextMenuListener(this);
        }

        @Override
        public void onClick(View v) {
            if(Listener != null){
                int position = getAdapterPosition();
                if (position != RecyclerView.NO_POSITION) {
                    Listener.OnItemClick(position);
                }
            }
        }

        @Override
        public void onCreateContextMenu(ContextMenu menu,View v,ContextMenu.ContextMenuInfo menuInfo) {
            menu.setHeaderTitle("Select Action");
            MenuItem details = menu.add(Menu.NONE ,1,1,"Details");
            MenuItem delete = menu.add(Menu.NONE ,2,2,"Delete");

            details.setOnMenuItemClickListener(this);
            delete.setOnMenuItemClickListener(this);
        }

        @Override
        public boolean onMenuItemClick(MenuItem item) {
            if(Listener != null){
                int position = getAdapterPosition();
                if (position != RecyclerView.NO_POSITION) {
                    switch(item.getItemId()){
                        case 1:
                            Listener.OnDetailsClick(position);
                            return true;

                        case 2:
                            Listener.OnDeleteClick(position);
                            return true;
                    }
                }
            }
            return false;
        }
    }

    public interface OnItemClickListener{
        void OnItemClick(int Position);

        void OnDetailsClick(int Position);

        void OnDeleteClick(int Position);
    }
    public void SetOnClickItemListener(OnItemClickListener listener){
        Listener = listener;
    }
}

MyAddsFragment. java

package com.example.login.ui.login;

import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import com.example.login.ImageAdapter;
import com.example.login.R;
import com.example.login.Upload;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;
import java.util.List;

public class MyAddsFragment extends Fragment implements ImageAdapter.OnItemClickListener{

    private RecyclerView recyclerView;
    private ImageAdapter adapter;
    private ProgressBar progressBar;
    private DatabaseReference databaseRef;
    private List<Upload> Uploads;
    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View v =  inflater.inflate(R.layout.fragment_myadds, container, false);

        recyclerView = v.findViewById(R.id.Recycler_view);
        recyclerView.setHasFixedSize(true);
        recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
        progressBar = v.findViewById(R.id.progress_bar_1);
        Uploads = new ArrayList<>();

        databaseRef = FirebaseDatabase.getInstance().getReference("uploads");
        databaseRef.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot){
                for (DataSnapshot postSnapshot : dataSnapshot.getChildren()){
                    Upload upload = postSnapshot.getValue(Upload.class);
                    Uploads.add(upload);
                }
                adapter = new ImageAdapter(getActivity(), Uploads);
                recyclerView.setAdapter(adapter);

                adapter.SetOnClickItemListener((ImageAdapter.OnItemClickListener) getActivity());

                progressBar.setVisibility(View.INVISIBLE);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
                Toast.makeText(getActivity(),databaseError.getMessage(),Toast.LENGTH_SHORT).show();
                progressBar.setVisibility(View.INVISIBLE);
            }
        });
        return v;
    }

    @Override
    public void OnItemClick(int Position) {
        Toast.makeText(getActivity(),"Normal Click Position:"+Position,Toast.LENGTH_SHORT).show();
    }

    @Override
    public void OnDetailsClick(int Position) {
        Toast.makeText(getActivity(),"Details Click Position:"+Position,Toast.LENGTH_SHORT).show();
    }

    @Override
    public void OnDeleteClick(int Position) {
        Toast.makeText(getActivity(),"Delete Click Position:"+Position,Toast.LENGTH_SHORT).show();
    }
}

Ошибка указана ниже

01-24 12:33:27.072 6252-6252/com.example.login E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.login, PID: 6252
    java.lang.ClassCastException: com.example.login.HomeActivity cannot be cast to com.example.login.ImageAdapter$OnItemClickListener
        at com.example.login.ui.login.MyAddsFragment$1.onDataChange(MyAddsFragment.java:57)
        at com.google.firebase.database.core.ValueEventRegistration.fireEvent(com.google.firebase:firebase-database@@19.2.0:75)
        at com.google.firebase.database.core.view.DataEvent.fire(com.google.firebase:firebase-database@@19.2.0:63)
        at com.google.firebase.database.core.view.EventRaiser$1.run(com.google.firebase:firebase-database@@19.2.0:55)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:135)
        at android.app.ActivityThread.main(ActivityThread.java:5254)
        at java.lang.reflect.Method.invoke(Native Method)
        at java.lang.reflect.Method.invoke(Method.java:372)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

..... .................................................. .............................................

1 Ответ

1 голос
/ 24 января 2020

ваш класс MyAddsFragment реализует ImageAdapter.OnItemClickListener, поэтому для установки adapter.SetOnClickItemListener вы можете просто использовать приведенный ниже код -

adapter.SetOnClickItemListener(MyAddsFragment.this)

Вы не можете привести ImageAdapter.OnItemClickListener к HomeActicity.class, как это возможно не реализую его.

...