我的应用程序中有一个明显的问题。我找到了api并进行了训练以使用改造库。通过此api,我可以从一个站点获取作业列表,并在基于自定义适配器的recyclerview上表示它们。我向此recyclerView发送jobs: ArrayList<JobModel>
,并创建了JobModel
,这是我的模型类。然后在onBindViewHolder
中:
val jobModel = jobs[position]
然后是我的模型类:
public class JobModel {
@SerializedName("company_name")
@Expose
private String company_name;
@SerializedName("lastdate")
@Expose
private String lastdate;
@SerializedName("id")
@Expose
private int id;
@SerializedName("position")
@Expose
private String position;
@SerializedName("location")
@Expose
private String location;
@SerializedName("job_link")
@Expose
private String job_link;
@SerializedName("seen")
@Expose
private boolean seen;
public JobModel(String company_name, String lastdate, int id, String position, String location, String job_link, boolean seen) {
this.company_name = company_name;
this.lastdate = lastdate;
this.id = id;
this.position = position;
this.location = location;
this.job_link = job_link;
this.seen = seen;
}
public String getCompany_name() {
return company_name;
}
public String getLastdate() {
return lastdate;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getPosition() {
return position;
}
public void setPosition(String position) {
this.position = position;
}
public String getLocation() {
return location;
}
public String getJob_link() {
return job_link;
}
public boolean isSeen() {
return seen;
}
}
问题是为此,我必须将单击的作业标记为可见,我必须发送具有选定作业ID的请求,但我要发送列表中最后一个可见项目的ID。我知道为什么会发生,但是我无法想象如何解决这个问题。发生这种情况是因为我创建了id的全局变量:
var jId: Int? = 0
,然后在onBindViewHolder
中,将值分配给此变量:
val jobModel = jobs[position]
jId = jobModel.id
,当我单击项目列表时,它将在recyclerView上发送带有最后一个可见项目的请求。因此,我只能建议一个解决方案-创建一个数组,该数组将填充作业ID,然后单击某个作业时,我将按位置获取一个项目,然后发送请求。单击操作:
holder.itemView.setOnClickListener(this)
然后:
override fun onClick(p0: View?) {
Singleton.clickReq(jId, ctx)
click.sendData(url, pos!!, jobTitle!!)
}
那么,我该如何解决我的问题?
答案 0 :(得分:2)
设置视图时,您可以在视图中set the jobId as a tag,然后检索单击的视图的jobId。
示例片段如下:
myTextView.setText(job.getCompanyName());
....
myView.setTag(job.getId());
然后单击视图时,您可以使用
获得相应的jobId。clickedJobId = myView.getTag();
答案 1 :(得分:0)
public class JobListAdapter extends RecyclerView.Adapter<JobListAdapter.JobViewHolder> {
private Context mContext;
private ArrayList<JobModel> mJobList = new ArrayList<>();
public JobListAdapter(Context context) {
mContext = context;
}
public void setJobList(ArrayList<JobModel> jobList) {
mJobList = jobList;
}
@Override
public JobViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_job_list, parent, false);
JobViewHolder viewHolder = new JobViewHolder(view);
return viewHolder;
}
@Override
public void onBindViewHolder(JobViewHolder holder, final int position) {
final JobViewHolder wHolder = holder;
//. you can get the item here
JobModel jobModel = mJobList.get(position);
holder.itemView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
return false;
}
});
}
@Override
public int getItemCount() {
return mJobList.size();
}
public class JobViewHolder extends RecyclerView.ViewHolder {
private View mItemView;
private TextView mTextView;
public JobViewHolder(View itemView) {
super(itemView);
mItemView = itemView;
mTextView = (TextView) itemView.findViewById(R.id.text_view);
}
}
}
//. item_job_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
使用这样的代码
private RecyclerView mJobRecyclerView;
private JobListAdapter mJobListAdapter;
mJobListAdapter = new JobListAdapter(this);
ArrayList<JobModel> jobList = new ArrayList<>();
//. add job
JobModel jobmodel = new JobModel();
jobList.add(jobmodel);
mJobListAdapter.setJobList(jobList);
mJobRecyclerView.setAdapter(mJobListAdapter);