如何从RecyclerView获取值以进行详细活动

时间:2018-12-27 11:26:03

标签: java android web-services

我热衷于显示我的数据。它包含带有CardView的RecyclerView。我正在从Web服务获取价值。但是在CardView中仅显示其中的2个。当我单击CardView时,它将开始新的活动以了解详细信息。在本活动中,我想用值填充组件。我需要帮助。我该怎么办?我应该使用查询再次调用Web服务,还是在Android中有任何可能的方法?

我试图将某些变量设置为静态,但是我的头脑很困惑,我不知道如何执行此操作。顺便说一句,如果我输入的主题有误,请重定向到有效主题。

这是我从Web服务获取价值的代码

  public void CallService(){
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://10.0.3.2:45455/")
            .addConverterFactory(GsonConverterFactory.create())
            .build();

    JsonPlaceholderAPI jsonPlaceholderAPI = retrofit.create(JsonPlaceholderAPI.class);

    Call<List<Records>> call = jsonPlaceholderAPI.records();

    call.enqueue(new Callback<List<Records>>() {
        @Override
        public void onResponse(Call<List<Records>> call, Response<List<Records>> response) {
            if(!response.isSuccessful()){
                Log.v("CODE : " , String.valueOf(response.code()));
                return;
            }
            InitData(response.body());
        }
        @Override
        public void onFailure(Call<List<Records>> call, Throwable t) {
            Log.v("ERROR :  " , t.getMessage());
          }
    });

这里是InitData For将值传递给RecyclerView。

public void InitData(List<Records> body){
    List<Records> record;
    record = body;
    for(Records records : record) {
        arrayList.add(new RecyclerLayout(" KODU : " + records.getKODU() , "AÇIKLAMA : " + records.getACIKLAMA()));
        adapter = new RecyclerAdapter(arrayList);
    }
    recyclerView.setAdapter(adapter);
    adapter.notifyDataSetChanged();
}

这里是重定向到详细活动代码

@Override
public void onBindViewHolder(final MyViewHolder holder , final int position) {
    holder.kod.setText(arrayList.get(position).getKodu());
    holder.aciklama.setText(arrayList.get(position).getAciklama());
    holder.view.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            Context context = holder.view.getContext();
         //   System.out.println("CLICKED " +position);
            Intent intent = new Intent(context, KayitDetay.class);

            context.startActivity(intent);
        }
    });

这是我没有Getters和Setters的POJO(他们在其中,但我没有在这里粘贴它)

 @SerializedName("KODU")
@Expose
private String kODU;
@SerializedName("ACIKLAMA")
@Expose
private String aCIKLAMA;
@SerializedName("KAPALI_FL")
@Expose
private boolean kAPALIFL;
@SerializedName("TARIH")
@Expose
private String tARIH;
@SerializedName("TUTAR")
@Expose
private double tUTAR;
@SerializedName("DURUM")
@Expose
private int dURUM;

我想查看我在其他活动中的价值观。

3 个答案:

答案 0 :(得分:2)

您可以使用Intent表单适配器将值传递给活动。

Intent intent = new Intent(context, KayitDetay.class); intent.putEXtra("Key",arrayList.get(position).getAciklama()) context.startActivity(intent);

您可以使用以下代码在KayitDetay Activity中检索这些值: //获得一个字符串 字符串值= intent.getStringEXtra(“ Key”)

答案 1 :(得分:1)

替换此:

Intent intent = new Intent(context, KayitDetay.class);

context.startActivity(intent);

Intent intent = new Intent(context, KayitDetay.class);
intent.putExtra("key",arrayList.get(position));
context.startActivity(intent);

然后在详细信息屏幕上,借助捆绑软件获取密钥

答案 2 :(得分:0)

创建一个侦听器接口,然后让您的Activity实现它。

public interface OnItemClickListener {
    void onItemClick(Records record);
}

在您的活动中:

public class MainActivity implements OnItemClickListener {

    @Override
    public void onItemClick(Records record) {
        // handle Item click data
        // pass record data to details activity here
    }
}

在适配器中:

  // declare this globally
  public OnItemClickListener onItemClickListener ;

  // ViewHolder
      @Override
        public void onBindViewHolder(VideoHolder holder, int position) {
              holder.view.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            onItemClickListener .onItemClick(arrayList.get(position));
                        }
                    });
                }