【问题标题】:Recyclerview passing ID from array to another activity onClick returns random idRecyclerview 将 ID 从数组传递到另一个活动 onClick 返回随机 id
【发布时间】:2016-05-05 08:48:40
【问题描述】:

我有一个 recyclerview,onClicked 应该返回其当前的PROJECT_ID 并将其传递给另一个活动,但是现在我得到一个随机的 PROJECT_ID。 (请记住我没有告诉getAdapterPosition(),我需要来自我的ArrayList 的当前项目PROJECT_ID

int i;
     RecyclerViewHolder(final View itemView) {
                    super(itemView);
                    mProjectName = (TextView) itemView.findViewById(R.id.PROJECT_name);
                    mProjectCity = (TextView) itemView.findViewById(R.id.PROJECT_city);
                    mProjectType = (TextView) itemView.findViewById(R.id.PROJECT_type);
                    mImage = (ImageView) itemView.findViewById(R.id.PROJECT_image);
                    mCheck = (CheckBox) itemView.findViewById(R.id.PROJECT_fav);
                    mProjectStatus = (RelativeLayout) itemView.findViewById(R.id.label);
                    itemView.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            projectid = PROJECT_ID.get(i);
                            Intent in = new Intent(v.getContext(), HomeRecyclerDetailActivity.class);
                            in.putExtra("PID",projectid);
                            v.getContext().startActivity(in);
                        }
                    });
                }
            }
      @Override
            public RecyclerViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
                v1 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerview_item, viewGroup, false);
                return new RecyclerViewHolder(v1);
            }

            @Override
            public void onBindViewHolder(final RecyclerViewHolder viewHolder, int i) {    
     SharedPreferences pref = getContext().getSharedPreferences("MirSP", Context.MODE_PRIVATE);
                    SharedPreferences.Editor editor = pref.edit();
                    String offlinejson = pref.getString("OFFLINEJSON", "");
                    if (!offlinejson.equals("")) {
                        try {
                            JSONObject jsonObject = new JSONObject(offlinejson);
                            JSONArray data = jsonObject.getJSONArray(TAG_DATA);
                            Length = data.length();
                            PROJECT_ID = new ArrayList<Integer>();
                            PROJECT_TITLE = new ArrayList<String>();
                            PROJECT_CITY = new ArrayList<String>();
                            PROJECT_TYPE = new ArrayList<String>();
                            PROJECT_IMAGE = new ArrayList<String>();
                            PROJECT_STATUS = new ArrayList<String>();
                            for (int j = 0, count = data.length(); j < count; j++) {
                                try {
                                    JSONObject json = data.getJSONObject(j);
                                    int name = json.getInt(TAG_ID);
                                    PROJECT_ID.add(name);
                                    String name1 = json.getString(TAG_PROJECT_TITLE);
                                    PROJECT_TITLE.add(name1);
                                    String name2 = json.getString(TAG_PROJECT_CITY);
                                    PROJECT_CITY.add(name2);
                                    String name3 = json.getString(TAG_PROJECT_TYPE);
                                    PROJECT_TYPE.add(name3);
                                    String name4 = json.getString(TAG_PROJECT_IMAGE);
                                    PROJECT_IMAGE.add(name4);
                                    String name5 = json.getString(TAG_PROJECT_STATUS);
                                    PROJECT_STATUS.add(name5);
                                    Log.e("JSON OFFLINE NAME", String.valueOf(PROJECT_ID));
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                         projecttitle = PROJECT_TITLE.get(i);
                         projectcity = PROJECT_CITY.get(i);
                         projecttype = PROJECT_TYPE.get(i);
                         projectimage = PROJECT_IMAGE.get(i);
                        projectstatus = PROJECT_STATUS.get(i);
        //             Set the values
                        viewHolder.mProjectName.setText(projecttitle);
                        viewHolder.mProjectCity.setText(projectcity);
                        viewHolder.mProjectType.setText(projecttype);

                        ImageLoader.getInstance().displayImage(projectimage, viewHolder.mImage, options);

【问题讨论】:

  • 从哪里得到i in RecyclerViewHolder
  • PROJECT_ID 是你的对象,我是你的位置吗?
  • 这里需要使用getPosition()而不是i。
  • 更改 projectid = PROJECT_ID.get(getAdapterPosition()) 它将为您获取 arraylist 中当前项目的 PROJECT_ID 或在 onBindViewHolder() 中使用 OnClickListener

标签: android arraylist android-recyclerview


【解决方案1】:

尝试成为 OPP 的人,这样可以节省您的时间和精力。

在您的onBindViewHolder() 中使用该项目的位置来获取 ArrayList 中的项目,

Item someItem = list.get(i);

一旦你得到那个物品,你就可以从那个物品中得到PROJECT_ID

someItem.getProjectID();

我假设您将为Item 创建一个模型类来表示adapter 中的项目列表

你可以像这样填充你的列表

    ArrayList<Item> items = new ArrayList<>();
    for (int j = 0, count = data.length(); j < count; j++) {
        try {
            JSONObject json = data.getJSONObject(j);
            Item item = new Item();
            item.setProject_ID(""+json.getInt(TAG_ID));
            item.setProject_ID(""+json.getString(TAG_PROJECT_TITLE));
            item.setProject_ID(""+json.getString(TAG_PROJECT_CITY));
            item.setProject_ID(""+json.getString(TAG_PROJECT_TYPE));
            item.setProject_ID(""+json.getString(TAG_PROJECT_IMAGE));
            item.setProject_ID(""+json.getString(TAG_PROJECT_STATUS));
            items.add(item);
        } catch (JSONException e) {
            e.printStackTrace();
        }
    }

类似的东西

public class Item {

    private String project_ID;
    private String project_Title;
    private String project_City;
    private String project_Type;
    private String project_Image;
    private String project_Status;

    public String getProject_ID() {
        return project_ID;
    }

    public void setProject_ID(String project_ID) {
        this.project_ID = project_ID;
    }

    public String getProject_Title() {
        return project_Title;
    }

    public void setProject_Title(String project_Title) {
        this.project_Title = project_Title;
    }

    public String getProject_City() {
        return project_City;
    }

    public void setProject_City(String project_City) {
        this.project_City = project_City;
    }

    public String getProject_Type() {
        return project_Type;
    }

    public void setProject_Type(String project_Type) {
        this.project_Type = project_Type;
    }

    public String getProject_Image() {
        return project_Image;
    }

    public void setProject_Image(String project_Image) {
        this.project_Image = project_Image;
    }

    public String getProject_Status() {
        return project_Status;
    }

    public void setProject_Status(String project_Status) {
        this.project_Status = project_Status;
    }
}

【讨论】:

    【解决方案2】:

    onBindViewHolder 中使用setOnClickListener 请参阅下面您修改后的代码并从RecyclerViewHolder 中删除setOnClickListener

    @Override
            public void onBindViewHolder(final RecyclerViewHolder viewHolder, int i) {    
     SharedPreferences pref = getContext().getSharedPreferences("MirSP", Context.MODE_PRIVATE);
                    SharedPreferences.Editor editor = pref.edit();
                    String offlinejson = pref.getString("OFFLINEJSON", "");
                    if (!offlinejson.equals("")) {
                        try {
                            JSONObject jsonObject = new JSONObject(offlinejson);
                            JSONArray data = jsonObject.getJSONArray(TAG_DATA);
                            Length = data.length();
                            PROJECT_ID = new ArrayList<Integer>();
                            PROJECT_TITLE = new ArrayList<String>();
                            PROJECT_CITY = new ArrayList<String>();
                            PROJECT_TYPE = new ArrayList<String>();
                            PROJECT_IMAGE = new ArrayList<String>();
                            PROJECT_STATUS = new ArrayList<String>();
                            for (int j = 0, count = data.length(); j < count; j++) {
                                try {
                                    JSONObject json = data.getJSONObject(j);
                                    int name = json.getInt(TAG_ID);
                                    PROJECT_ID.add(name);
                                    String name1 = json.getString(TAG_PROJECT_TITLE);
                                    PROJECT_TITLE.add(name1);
                                    String name2 = json.getString(TAG_PROJECT_CITY);
                                    PROJECT_CITY.add(name2);
                                    String name3 = json.getString(TAG_PROJECT_TYPE);
                                    PROJECT_TYPE.add(name3);
                                    String name4 = json.getString(TAG_PROJECT_IMAGE);
                                    PROJECT_IMAGE.add(name4);
                                    String name5 = json.getString(TAG_PROJECT_STATUS);
                                    PROJECT_STATUS.add(name5);
                                    Log.e("JSON OFFLINE NAME", String.valueOf(PROJECT_ID));
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }
    
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                         projecttitle = PROJECT_TITLE.get(i);
                         projectcity = PROJECT_CITY.get(i);
                         projecttype = PROJECT_TYPE.get(i);
                         projectimage = PROJECT_IMAGE.get(i);
                        projectstatus = PROJECT_STATUS.get(i);
        //             Set the values
                        viewHolder.mProjectName.setText(projecttitle);
                        viewHolder.mProjectCity.setText(projectcity);
                        viewHolder.mProjectType.setText(projecttype);
                        viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
                            @Override
                            public void onClick(View v) {
                                // below way you can pass any value
                                projectid = PROJECT_ID.get(i);
                                Intent in = new Intent(v.getContext(), HomeRecyclerDetailActivity.class);
                                in.putExtra("PID",projectid);
                                v.getContext().startActivity(in);
                            }
                        });
    
                        ImageLoader.getInstance().displayImage(projectimage, viewHolder.mImage, options);
                    }
            }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-03
      • 1970-01-01
      • 1970-01-01
      • 2013-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多