如何在Android Studio中从片段到活动的适配器上运行意图

时间:2018-09-28 02:35:39

标签: android-intent android-recyclerview android-adapter android-fragmentactivity

我想将布局从recyclerview中的适配器中移走,并且我想使用片段将布局移到活动中,并在适配器上将意图从片段移到活动中, 这是我的适配器:

public class VerifikasiPembayaranAdapter extends RecyclerView.Adapter<VerifikasiPembayaranAdapter.ViewHolder> {
    public VerifikasiPembayaranFragment pembayaranFragment;
    public VerifikasiPembayaranAdapter() {}
@NonNull
    @Override
    public VerifikasiPembayaranAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
       View v = LayoutInflater.from(viewGroup.getContext())
               .inflate(R.layout.list_verifikasi_pembayaran,viewGroup,false);
       final ViewHolder viewHolder = new ViewHolder(v);
       viewHolder.list_verifikasi_pembayaran.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
              Intent intent = new Intent(pembayaranFragment.getContext(), VerifikasiPembayaranActivity.class);
           pembayaranFragment.startActivity(intent);
           }
       });
       return viewHolder;
    }
}

,错误提示: 尝试在空对象引用上调用虚拟方法'android.support.v4.app.FragmentActivity com.example.umroini.belajar.Fragment.VerifikasiPembayaranFragment.getActivity()'。

1 个答案:

答案 0 :(得分:0)

您不应处理适配器内与Intent有关的所有内容。您的适配器应仅处理如何将数据呈现给用户。与数据操作,处理等有关的所有事务都应委托给Fragment或Activity。因此,您需要使用Listener。

首先,在适配器中创建侦听器。

public class VerifikasiPembayaranAdapter extends RecyclerView.Adapter<VerifikasiPembayaranAdapter.ViewHolder> {

    public interface Listener {
        void onItemClicked(YourDataItem item);
    }

    private Listener listener;

    public VerifikasiPembayaranAdapter(Listener listener) {
        this.listener = listener;
    }

    @NonNull
    @Override
    public VerifikasiPembayaranAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

       ...

       viewHolder.list_verifikasi_pembayaran.setOnClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
              listener.onItemClicked(yourItem);
           }
       });

       return viewHolder;
    }
}

第二,最后,在“活动”或“片段”中使用适配器:

VerifikasiPembayaranAdapter.Listener listener = new VerifikasiPembayaranAdapter.Listener() {
   @Override
   public void onItemClicked(YourDataItem item) {
      // Here you handling the click listener of item.
      Intent intent = new Intent(getActivity(), VerifikasiPembayaranActivity.class);
      pembayaranFragment.startActivity(intent);
   }
};
VerifikasiPembayaranAdapter adapter = new VerifikasiPembayaranAdapter(listener);