如何为不同的Recycler View项目调用不同的api?

时间:2019-12-20 16:19:24

标签: android retrofit retrofit2

我有RecyclerView装有使用Call<list<model>>改装进行装载的物品。现在,我想当我单击“回收站视图”的每个项目时,应从不同的api id加载数据。例如:

  1. 当我单击第1项时:应加载“ http .... id = 1”

  2. 当我单击项目2时:应加载“ http .... id = 2”

  3. 当我单击项目3时:应加载“ http .... id = 3”。依此类推

以下是我的适配器,用于加载回收视图项(我应该在这里做什么?):

public class WhatsAndroidAdapter extends RecyclerView.Adapter<WhatsAndroidAdapter.CustomViewHolder> {
    List<WhatsAndroid.WhatsAndroidModel> WAmdel;
    Context context;

    public WhatsAndroidAdapter(Context context,List<WhatsAndroid.WhatsAndroidModel> employees) {
        this.WAmdel = employees;
        this.context=context;
    }

    @Override
    public CustomViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View itemView = LayoutInflater.from(parent.getContext())
                .inflate(R.layout.whatsandroid_item , parent, false);

        return new CustomViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(CustomViewHolder holder, int position) {

        holder.textView.setText(String.valueOf(position+1)+". ");
        holder.employeeName.setText(WAmdel.get(position).getTitle());
    }

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

    public class CustomViewHolder extends RecyclerView.ViewHolder {
        public TextView employeeName;
        TextView textView;

        public CustomViewHolder(View view) {
            super(view);
            employeeName = (TextView) view.findViewById(R.id.WA2);
            textView=view.findViewById(R.id.WA1);
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent =  new Intent(context, NextActivity.class);
                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                    context.startActivity(intent);

                }
            });

        }
    }}

WhatsAndoid活动:

public class WhatsAndroid extends AppCompatActivity {
private RecyclerView recyclerView;
private WhatsAndroidAdapter WAAdapter;
ProgressDialog progressDialog;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.whatsandroid_layout);
    progressDialog = new ProgressDialog(WhatsAndroid.this);
    progressDialog.setMessage("Loading....");
    progressDialog.show();
    Toolbar toolbar = (Toolbar) findViewById(R.id. toolbar );
    setSupportActionBar( toolbar );
    if (getSupportActionBar() != null) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setDisplayShowHomeEnabled(true);
    }
    WhatsAndroidApiService service = WhatsAndroidApiClient.getRetrofitInstance().create(WhatsAndroidApiService.class);
    Call<List<WhatsAndroid.WhatsAndroidModel>> call = service.getWhatsAndroid();

    call.enqueue(new Callback<List<WhatsAndroid.WhatsAndroidModel>>() {
        @Override
        public void onResponse(Call<List<WhatsAndroid.WhatsAndroidModel>> call, Response<List<WhatsAndroid.WhatsAndroidModel>> response) {
           progressDialog.dismiss();
            generateDataList(response.body());

        }

        @Override
        public void onFailure(Call<List<WhatsAndroid.WhatsAndroidModel>> call, Throwable t) {
           progressDialog.dismiss();
            Toast.makeText(getApplicationContext(), "Something went wrong...Please try later!", Toast.LENGTH_SHORT).show();


        }
    });
}
private void generateDataList(List<WhatsAndroid.WhatsAndroidModel> employeeList) {
    recyclerView = findViewById(R.id.WArecycle);
    LinearLayoutManager manager = new LinearLayoutManager(getApplicationContext());
    recyclerView.setLayoutManager(manager);
    recyclerView.setHasFixedSize(true);
    WAAdapter = new WhatsAndroidAdapter(getApplicationContext(),employeeList);
    recyclerView.setAdapter(WAAdapter);
}
public class WhatsAndroidModel {
    @SerializedName("id")
    @Expose
    private String id;
    @SerializedName("title")
    @Expose
    private String title;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }
}
@Override
public boolean onOptionsItemSelected(@NonNull MenuItem item) {
    if (item.getItemId() ==android.R.id.home) {
        finish();
    }
    return super.onOptionsItemSelected(item);
}
@Override
public void onBackPressed() {
    super.onBackPressed();
}}

2 个答案:

答案 0 :(得分:1)

在这里更改

 public class CustomViewHolder extends RecyclerView.ViewHolder {
        public TextView employeeName;
        TextView textView;

        public CustomViewHolder(View view) {
            super(view);
            employeeName = (TextView) view.findViewById(R.id.WA2);
            textView=view.findViewById(R.id.WA1);
            view.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent =  new Intent(context, NextActivity.class);

if(WAmdel.get(getAdapterPosition()==0)
{
 intent.putExtra("url","http://mapi.trycatchtech.com/v1/android_tutorials/single_tutorial?tutorial_id=1");
}
else if(WAmdel.get(getAdapterPosition()==1)
{
 intent.putExtra("url","http://mapi.trycatchtech.com/v1/android_tutorials/single_tutorial?tutorial_id=2");
}



                    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);

                    context.startActivity(intent);

                }
            });

        }

现在在您的NextActivity中获取这样的网址

String url = getIntent().getStringExtra("url");

答案 1 :(得分:0)

public interface ExampleService { 

  String BASE_URL = "https://api.demo.com/";

  @GET("Login") //i.e https://api.demo.com/Login? 
  Call<Products> getUserDetails(@Query("email") String emailID, @Query("password") String password)

} 

它将被称为这种方式。考虑到您已经完成了其余代码。

Call<Results> call = service.getUserDetails("abc@gmail.com", "Password@123");

例如,当返回查询时,它将看起来像这样。

https://api.demo.com/Login?email=abc@gmail.com&password=Password@123