如何将ID分配给recyclerView Android的某个项目?

时间:2019-05-22 13:26:47

标签: android android-recyclerview

我的应用程序中有一个明显的问题。我找到了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!!)
    }

那么,我该如何解决我的问题?

2 个答案:

答案 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);