繁体   English   中英

如何从适配器获取上下文片段

[英]How to get context fragments from adapters

我正在尝试为片段创建适配器

为我的 cardview 创建一个持有人。 在 setOnClickListener 的代码中,在 startActivityForResult 中出现错误以显示对片段的编辑

这是我的代码

@Override
public void onBindViewHolder(RvFragmentAdapter.MyViewHolder holder, final int position) {
    holder.tv_id.setText(array_id.get(position));
    holder.tv_username.setText(array_username.get(position));
    holder.tv_email.setText(array_email.get(position));
    holder.tv_nama.setText(array_nama.get(position));
    holder.tv_jenis_kelamin.setText(array_jenis_kelamin.get(position));
    holder.tv_no_hp.setText(array_no_hp.get(position));
    holder.tv_sertifikat.setText(array_sertifikat.get(position));
    holder.tv_no_kta.setText(array_no_kta.get(position));
    holder.tv_masa_berlaku.setText(array_masa_berlaku.get(position));
    holder.tv_no_reg.setText(array_no_reg.get(position));
    holder.tv_password.setText(array_password.get(position));
    holder.tv_level.setText(array_level.get(position));
    holder.tv_agama.setText(array_agama.get(position));
    holder.tv_tempat_lahir.setText(array_tempat_lahir.get(position));
    holder.tv_tgl_lahir.setText(array_tgl_lahir.get(position));
    holder.tv_area.setText(array_area.get(position));

    Glide.with(mContext)
            .load(array_url_gambar.get(position))
            .placeholder(R.drawable.ic_action_person)
            .apply(new RequestOptions().override(80, 100))
            .into(holder.iv_url_gambar);
    holder.cv_main.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Intent i = new Intent(mContext, EditPersonilActivity.class);
            i.putExtra("id",array_id.get(position));
            i.putExtra("username",array_username.get(position));
            i.putExtra("email",array_email.get(position));
            i.putExtra("nama",array_nama.get(position));
            i.putExtra("jenis_kelamin",array_jenis_kelamin.get(position));
            i.putExtra("no_hp",array_no_hp.get(position));
            i.putExtra("sertifikat",array_sertifikat.get(position));
            i.putExtra("no_kta",array_no_kta.get(position));
            i.putExtra("masa_berlaku",array_masa_berlaku.get(position));
            i.putExtra("no_reg",array_no_reg.get(position));
            i.putExtra("password",array_password.get(position));
            i.putExtra("level",array_level.get(position));
            i.putExtra("agama",array_agama.get(position));
            i.putExtra("tempat_lahir",array_tempat_lahir.get(position));
            i.putExtra("tgl_lahir",array_tgl_lahir.get(position));
            i.putExtra("area",array_area.get(position));

            ((EditPersonilFragment)mContext).startActivityForResult(i,2);
        }
    });

}

这是错误代码

((EditPersonilFragment)mContext).startActivityForResult(i,2);

这是错误信息

error: incompatible types: Context cannot be converted to EditPersonilFragment
            ((EditPersonilFragment)mContext).startActivityForResult(i,2);

这是我的适配器的完整代码

package elnusa.co.smart.model;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.cardview.widget.CardView;
import androidx.recyclerview.widget.RecyclerView;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
import java.util.ArrayList;
import elnusa.co.smart.EditPersonilActivity;
import elnusa.co.smart.R;
import elnusa.co.smart.ui.home.EditPersonilFragment;
public class RvFragmentAdapter extends RecyclerView.Adapter<RvFragmentAdapter.MyViewHolder> {
    private Context mContext;
    private ArrayList<String> array_id, array_username, array_email, array_nama, array_jenis_kelamin,
            array_no_hp, array_sertifikat,array_no_kta, array_no_reg, array_masa_berlaku,
            array_password, array_level, array_agama, array_tempat_lahir, array_tgl_lahir,array_area,array_url_gambar;
    ProgressDialog progressDialog;

    public class MyViewHolder extends RecyclerView.ViewHolder {
        public TextView tv_id, tv_username, tv_email, tv_nama, tv_jenis_kelamin, tv_no_hp, tv_no_kta,
                tv_no_reg,tv_sertifikat,tv_masa_berlaku, tv_password, tv_level, tv_agama, tv_tempat_lahir,
                tv_tgl_lahir, tv_area;
        ImageView iv_url_gambar;
        public CardView cv_main;

        public MyViewHolder(View view) {
            super(view);
            cv_main = itemView.findViewById(R.id.cv_main);
            tv_id = itemView.findViewById(R.id.id);
            tv_username = itemView.findViewById(R.id.username);
            tv_email = itemView.findViewById(R.id.email);
            tv_password = itemView.findViewById(R.id.password);
            tv_level = itemView.findViewById(R.id.level);
            tv_nama = itemView.findViewById(R.id.nama);
            tv_jenis_kelamin = itemView.findViewById(R.id.jenis_kelamin);
            tv_no_hp = itemView.findViewById(R.id.no_hp);
            tv_sertifikat = itemView.findViewById(R.id.sertifikat);
            tv_no_kta = itemView.findViewById(R.id.no_kta);
            tv_no_reg = itemView.findViewById(R.id.no_reg);
            tv_masa_berlaku = itemView.findViewById(R.id.masa_berlaku);
            tv_agama = itemView.findViewById(R.id.agama);
            tv_tempat_lahir = itemView.findViewById(R.id.tempat_lahir);
            tv_tgl_lahir= itemView.findViewById(R.id.tgl_lahir);
            tv_area= itemView.findViewById(R.id.area);
            iv_url_gambar = itemView.findViewById(R.id.gbr_profil);
            progressDialog = new ProgressDialog(mContext);

        }
    }

    public RvFragmentAdapter(Context mContext, ArrayList<String> array_id, ArrayList<String> array_username,
                     ArrayList<String> array_email, ArrayList<String> array_nama, ArrayList<String> array_jenis_kelamin,
                     ArrayList<String> array_no_hp, ArrayList<String> array_sertifikat, ArrayList<String> array_no_kta,
                     ArrayList<String> array_masa_berlaku, ArrayList<String> array_no_reg, ArrayList<String> array_password,
                     ArrayList<String> array_level, ArrayList<String> array_agama, ArrayList<String> array_tempat_lahir,
                     ArrayList<String> array_tgl_lahir,ArrayList<String> array_area, ArrayList<String> array_url_gambar) {
        super();
        this.mContext = mContext;
        this.array_id = array_id;
        this.array_username = array_username;
        this.array_email = array_email;
        this.array_nama = array_nama;
        this.array_jenis_kelamin = array_jenis_kelamin;
        this.array_no_hp = array_no_hp;
        this.array_sertifikat = array_sertifikat;
        this.array_no_kta = array_no_kta;
        this.array_masa_berlaku = array_masa_berlaku;
        this.array_no_reg = array_no_reg;
        this.array_password = array_password;
        this.array_level = array_level;
        this.array_agama = array_agama;
        this.array_tempat_lahir = array_tempat_lahir;
        this.array_tgl_lahir = array_tgl_lahir;
        this.array_area = array_area;
        this.array_url_gambar = array_url_gambar;

    }

    @Override
    public RvFragmentAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater layoutInflater = LayoutInflater.from(parent.getContext());
        View itemView = layoutInflater.inflate(R.layout.template_rv,parent,false);
        return new RvFragmentAdapter.MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(RvFragmentAdapter.MyViewHolder holder, final int position) {
        holder.tv_id.setText(array_id.get(position));
        holder.tv_username.setText(array_username.get(position));
        holder.tv_email.setText(array_email.get(position));
        holder.tv_nama.setText(array_nama.get(position));
        holder.tv_jenis_kelamin.setText(array_jenis_kelamin.get(position));
        holder.tv_no_hp.setText(array_no_hp.get(position));
        holder.tv_sertifikat.setText(array_sertifikat.get(position));
        holder.tv_no_kta.setText(array_no_kta.get(position));
        holder.tv_masa_berlaku.setText(array_masa_berlaku.get(position));
        holder.tv_no_reg.setText(array_no_reg.get(position));
        holder.tv_password.setText(array_password.get(position));
        holder.tv_level.setText(array_level.get(position));
        holder.tv_agama.setText(array_agama.get(position));
        holder.tv_tempat_lahir.setText(array_tempat_lahir.get(position));
        holder.tv_tgl_lahir.setText(array_tgl_lahir.get(position));
        holder.tv_area.setText(array_area.get(position));

        Glide.with(mContext)
                .load(array_url_gambar.get(position))
                .placeholder(R.drawable.ic_action_person)
                .apply(new RequestOptions().override(80, 100))
                .into(holder.iv_url_gambar);
        holder.cv_main.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(mContext, EditPersonilActivity.class);
                i.putExtra("id",array_id.get(position));
                i.putExtra("username",array_username.get(position));
                i.putExtra("email",array_email.get(position));
                i.putExtra("nama",array_nama.get(position));
                i.putExtra("jenis_kelamin",array_jenis_kelamin.get(position));
                i.putExtra("no_hp",array_no_hp.get(position));
                i.putExtra("sertifikat",array_sertifikat.get(position));
                i.putExtra("no_kta",array_no_kta.get(position));
                i.putExtra("masa_berlaku",array_masa_berlaku.get(position));
                i.putExtra("no_reg",array_no_reg.get(position));
                i.putExtra("password",array_password.get(position));
                i.putExtra("level",array_level.get(position));
                i.putExtra("agama",array_agama.get(position));
                i.putExtra("tempat_lahir",array_tempat_lahir.get(position));
                i.putExtra("tgl_lahir",array_tgl_lahir.get(position));
                i.putExtra("area",array_area.get(position));

                ((EditPersonilFragment)mContext).startActivityForResult(i,1);
            }
        });

    }

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

这是我的片段

    package elnusa.co.smart.ui.home;

import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SearchView;
import android.widget.Toast;

import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;

import com.androidnetworking.AndroidNetworking;
import com.androidnetworking.common.Priority;
import com.androidnetworking.error.ANError;
import com.androidnetworking.interfaces.JSONObjectRequestListener;

import org.json.JSONArray;
import org.json.JSONObject;

import java.util.ArrayList;

import elnusa.co.smart.ListPersonilActivity;
import elnusa.co.smart.R;
import elnusa.co.smart.TambahPersonilActivity;
import elnusa.co.smart.model.RvFragmentAdapter;

public class EditPersonilFragment extends Fragment {

    SwipeRefreshLayout srl_main;
    RecyclerView rv_main;
    ArrayList<String> array_id, array_username, array_email, array_nama, array_jenis_kelamin,
            array_no_hp, array_sertifikat,array_no_kta, array_no_reg, array_masa_berlaku,
            array_password, array_level, array_agama, array_tempat_lahir, array_tgl_lahir, array_area,array_url_gambar;
    ProgressDialog progressDialog;


    private RvFragmentAdapter recycleViewAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View view = inflater.inflate(R.layout.fragment_editpersonil, container, false);
        setHasOptionsMenu(true);
        srl_main    = view.findViewById(R.id.swipe_to_refresh_layout);
        rv_main     = view.findViewById(R.id.rv_main);
        progressDialog = new ProgressDialog(getActivity());

        rv_main.hasFixedSize();
        LinearLayoutManager layoutManager = new LinearLayoutManager(getActivity(),LinearLayoutManager.VERTICAL,false);
        rv_main.setLayoutManager(layoutManager);


        srl_main.setOnRefreshListener(() -> {
            scrollRefresh();
            srl_main.setRefreshing(false);
        });
        scrollRefresh();
        return view;
    }

    public void scrollRefresh(){
        progressDialog.setMessage("Mengambil Data.....");
        progressDialog.setCancelable(false);
        progressDialog.show();
        new Handler().postDelayed(new Runnable() {
            @Override
            public void run() {
                getData();
            }
        },1200);
    }


    void initializeArray(){

        array_id = new ArrayList<>();
        array_username = new ArrayList<>();
        array_email = new ArrayList<>();
        array_nama = new ArrayList<>();
        array_jenis_kelamin = new ArrayList<>();
        array_no_hp = new ArrayList<>();
        array_sertifikat = new ArrayList<>();
        array_no_kta = new ArrayList<>();
        array_masa_berlaku = new ArrayList<>();
        array_no_reg = new ArrayList<>();
        array_password = new ArrayList<>();
        array_level = new ArrayList<>();
        array_agama = new ArrayList<>();
        array_tempat_lahir = new ArrayList<>();
        array_tgl_lahir = new ArrayList<>();
        array_area = new ArrayList<>();
        array_url_gambar = new ArrayList<>();

        array_id.clear();
        array_username.clear();
        array_email.clear();
        array_nama.clear();
        array_jenis_kelamin.clear();
        array_no_hp.clear();
        array_sertifikat.clear();
        array_no_kta.clear();
        array_masa_berlaku.clear();
        array_no_reg.clear();
        array_password.clear();
        array_level.clear();
        array_agama.clear();
        array_tempat_lahir.clear();
        array_tgl_lahir.clear();
        array_area.clear();
        array_url_gambar.clear();
    }

    public void getData(){
        initializeArray();
        AndroidNetworking.get("http://192.168.137.187/smart/user/getData.php")
                .setTag("Get Data")
                .setPriority(Priority.MEDIUM)
                .build()
                .getAsJSONObject(new JSONObjectRequestListener() {
                    @Override
                    public void onResponse(JSONObject response) {
                        progressDialog.dismiss();

                        try{
                            Boolean status = response.getBoolean("status");
                            if(status){
                                JSONArray ja = response.getJSONArray("result");
                                Log.d("respon",""+ja);
                                for(int i = 0 ; i < ja.length() ; i++){
                                    JSONObject jo = ja.getJSONObject(i);
                                    array_id.add(jo.getString("id"));
                                    array_username.add(jo.getString("username"));
                                    array_email.add(jo.getString("email"));
                                    array_nama.add(jo.getString("nama"));
                                    array_jenis_kelamin.add(jo.getString("jenis_kelamin"));
                                    array_no_hp.add(jo.getString("no_hp"));
                                    array_sertifikat.add(jo.getString("sertifikat"));
                                    array_no_kta.add(jo.getString("no_kta"));
                                    array_masa_berlaku.add(jo.getString("masa_berlaku"));
                                    array_no_reg.add(jo.getString("no_reg"));
                                    array_password.add(jo.getString("password"));
                                    array_level.add(jo.getString("level"));
                                    array_agama.add(jo.getString("agama"));
                                    array_tempat_lahir.add(jo.getString("tempat_lahir"));
                                    array_tgl_lahir.add(jo.getString("tgl_lahir"));
                                    array_area.add(jo.getString("area"));
                                    array_url_gambar.add(jo.getString("letak_gbr"));
                                }
                                recycleViewAdapter = new RvFragmentAdapter(getActivity(),array_id, array_username, array_email, array_nama, array_jenis_kelamin,
                                        array_no_hp, array_sertifikat,array_no_kta, array_no_reg, array_masa_berlaku,
                                        array_password, array_level, array_agama, array_tempat_lahir, array_tgl_lahir,array_area,array_url_gambar);
                                rv_main.setAdapter(recycleViewAdapter);
                            }else{
                                Toast.makeText(getActivity(), "Gagal Mengambil Data", Toast.LENGTH_SHORT).show();
                                recycleViewAdapter = new RvFragmentAdapter(getActivity(),array_id, array_username, array_email, array_nama, array_jenis_kelamin,
                                        array_no_hp, array_sertifikat,array_no_kta, array_no_reg, array_masa_berlaku,
                                        array_password, array_level, array_agama, array_tempat_lahir, array_tgl_lahir,array_area,array_url_gambar);
                                rv_main.setAdapter(recycleViewAdapter);
                            }
                        }
                        catch (Exception e){
                            e.printStackTrace();
                        }

                    }

                    @Override
                    public void onError(ANError anError) {

                    }
                });
    }

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        getActivity().getMenuInflater().inflate(R.menu.menu_search, menu);
        MenuItem mSearch = menu.findItem(R.id.action_search);
        SearchView mSearchView = (SearchView) mSearch.getActionView();
        mSearchView.setQueryHint("Search");
        mSearchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
            @Override
            public boolean onQueryTextSubmit(String nama) {
                return false;
            }
            @Override
            public boolean onQueryTextChange(String nama) {
                initializeArray();
                AndroidNetworking.post("http://192.168.137.187/smart/user/pencarian.php")
                        .addBodyParameter("nama",""+nama)
                        .setPriority(Priority.MEDIUM)
                        .build()
                        .getAsJSONObject(new JSONObjectRequestListener() {
                            @Override
                            public void onResponse(JSONObject response) {
                                progressDialog.dismiss();

                                try{
                                    Boolean status = response.getBoolean("status");
                                    if(status){
                                        JSONArray ja = response.getJSONArray("result");
                                        Log.d("respon",""+ja);
                                        for(int i = 0 ; i < ja.length() ; i++){
                                            JSONObject jo = ja.getJSONObject(i);
                                            array_id.add(jo.getString("id"));
                                            array_username.add(jo.getString("username"));
                                            array_email.add(jo.getString("email"));
                                            array_nama.add(jo.getString("nama"));
                                            array_jenis_kelamin.add(jo.getString("jenis_kelamin"));
                                            array_no_hp.add(jo.getString("no_hp"));
                                            array_sertifikat.add(jo.getString("sertifikat"));
                                            array_no_kta.add(jo.getString("no_kta"));
                                            array_masa_berlaku.add(jo.getString("masa_berlaku"));
                                            array_no_reg.add(jo.getString("no_reg"));
                                            array_password.add(jo.getString("password"));
                                            array_level.add(jo.getString("level"));
                                            array_agama.add(jo.getString("agama"));
                                            array_tempat_lahir.add(jo.getString("tempat_lahir"));
                                            array_tgl_lahir.add(jo.getString("tgl_lahir"));
                                            array_area.add(jo.getString("area"));
                                            array_url_gambar.add(jo.getString("letak_gbr"));
                                        }
                                        recycleViewAdapter = new RvFragmentAdapter(getActivity(),array_id, array_username, array_email, array_nama, array_jenis_kelamin,
                                                array_no_hp, array_sertifikat,array_no_kta, array_no_reg, array_masa_berlaku,
                                                array_password, array_level, array_agama, array_tempat_lahir, array_tgl_lahir,array_area,array_url_gambar);
                                        rv_main.setAdapter(recycleViewAdapter);
                                    }else{
                                        Toast.makeText(getActivity(), "Gagal Mengambil Data", Toast.LENGTH_SHORT).show();
                                        recycleViewAdapter = new RvFragmentAdapter(getActivity(),array_id, array_username, array_email, array_nama, array_jenis_kelamin,
                                                array_no_hp, array_sertifikat,array_no_kta, array_no_reg, array_masa_berlaku,
                                                array_password, array_level, array_agama, array_tempat_lahir, array_tgl_lahir,array_area,array_url_gambar);
                                        rv_main.setAdapter(recycleViewAdapter);
                                    }
                                }
                                catch (Exception e){
                                    e.printStackTrace();
                                }

                            }

                            @Override
                            public void onError(ANError anError) {

                            }
                        });
                return true;
            }
        });

        getActivity().getMenuInflater().inflate(R.menu.menu,menu);
        super.onCreateOptionsMenu(menu, inflater);
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        if(id==R.id.menu_add){
            Intent i = new Intent(getActivity(), TambahPersonilActivity.class);
            startActivityForResult(i,1);
        }
        if(id==R.id.menu_edit){
            Intent i = new Intent(getActivity(), ListPersonilActivity.class);
            startActivity(i);
        }
        return super.onOptionsItemSelected(item);
    }
    @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if(requestCode==2){
        if(resultCode==RESULT_OK){
            scrollRefresh();
        }else if(resultCode==RESULT_CANCELED){
            Toast.makeText(this, "Canceled", Toast.LENGTH_SHORT).show();
        }
    }
}

}





                                  

请替换 ((EditPersonilFragment)mContext).startActivityForResult(i,2); 与 startActivityForResult(i, 1);

几次错误后我找到了答案

我在适配器中添加了代码 EditPersonilFragment 片段

    public RvFragmentAdapter(Context mContext, EditPersonilFragment fragment, ArrayList<String> array_id, ArrayList<String> array_username,
                     ArrayList<String> array_email, ArrayList<String> array_nama, ArrayList<String> array_jenis_kelamin,
                     ArrayList<String> array_no_hp, ArrayList<String> array_sertifikat, ArrayList<String> array_no_kta,
                     ArrayList<String> array_masa_berlaku, ArrayList<String> array_no_reg, ArrayList<String> array_password,
                     ArrayList<String> array_level, ArrayList<String> array_agama, ArrayList<String> array_tempat_lahir,
                     ArrayList<String> array_tgl_lahir,ArrayList<String> array_area, ArrayList<String> array_url_gambar)
{
        super();
        this.mContext = mContext;
        this.fragment = fragment;
        this.array_id = array_id;
        this.array_username = array_username;
        this.array_email = array_email;
        this.array_nama = array_nama;
        this.array_jenis_kelamin = array_jenis_kelamin;
        this.array_no_hp = array_no_hp;
        this.array_sertifikat = array_sertifikat;
        this.array_no_kta = array_no_kta;
        this.array_masa_berlaku = array_masa_berlaku;
        this.array_no_reg = array_no_reg;
        this.array_password = array_password;
        this.array_level = array_level;
        this.array_agama = array_agama;
        this.array_tempat_lahir = array_tempat_lahir;
        this.array_tgl_lahir = array_tgl_lahir;
        this.array_area = array_area;
        this.array_url_gambar = array_url_gambar;

    }

并在片段中编码 EditPersonilFragment.this

recycleViewAdapter = new RvFragmentAdapter(getActivity(),EditPersonilFragment.this, array_id, array_username, array_email, array_nama, array_jenis_kelamin,
                                                array_no_hp, array_sertifikat,array_no_kta, array_no_reg, array_masa_berlaku,
                                                array_password, array_level, array_agama, array_tempat_lahir, array_tgl_lahir,array_area,array_url_gambar);
                                        rv_main.setAdapter(recycleViewAdapter);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM