2016-03-15 70 views
0

我有一個recyclerview來填充來自api的json數據。 這裏是每個recylerview項目project_id,title等項目,每個recyclerview我有複選框與它相關聯。Android:不使用`getAdapterPosition()獲取價值recyclerview項目的值`

以下是在recyclerview中填充數據的代碼。

for (int j = 0, count = data.length(); j < count; j++) { 
    String name = json.getString(TAG_PROJECT_ID); 
        PROJECT_ID.add(name); 
        Log.e("array id added",name); 
        String name1 = json.getString(TAG_PROJECT_TITLE); 
        PROJECT_TITLE.add(name1); 
} 

當點擊每個recyclerviewitem我想要得到的相應項目的project_id的複選框。

//click listener 
mCheck.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         //GET THE PROJECT ID 
         } 
)} 

更新實際代碼 (爲簡單起見,我又增加了這裏唯一相關的代碼) 我Recyclerview適配器

public class FavouriteManager extends RecyclerView.Adapter<FavouriteManager.RecyclerViewHolder> { 
ArrayList<String> PROJECT_ID; 
     ArrayList<String> PROJECT_TITLE; 
@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) { 
projecttitle = PROJECT_TITLE.get(i); 
viewHolder.mProjectName.setText(projecttitle); 
@Override 
     public int getItemCount() { 
      SharedPreferences pref = getContext().getSharedPreferences("MirSP", Context.MODE_PRIVATE); 
      set = pref.getStringSet("FAV", null); 
      if (set != null) { 
       selected = new ArrayList<String>(set); 
       Log.e("Item Added", ""); 
      } else { 
       selected = new ArrayList<String>(); 
      } 
      Length = selected.size(); 
      if (Length == 0) { 
       RelativeLayout IMG = (RelativeLayout) getActivity().findViewById(R.id.fav_img); 
       IMG.setVisibility(View.VISIBLE); 
      } 

      return Length; 
     } 
public class RecyclerViewHolder extends RecyclerView.ViewHolder { 
TextView mProjectName; 
CheckBox mCheck; 

      RecyclerViewHolder(final View itemView) { 
       super(itemView); 
       mProjectName = (TextView) itemView.findViewById(R.id.PROJECT_name); 
mCheck = (CheckBox) itemView.findViewById(R.id.PROJECT_fav); 
mCheck.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
int h = getAdapterPosition(); 
         if (!offlinejson.equals("")) { 
          try { 
           JSONObject jsonObject = new JSONObject(offlinejson); 
           JSONArray data = jsonObject.getJSONArray(TAG_DATA); 
           JSONObject jsondata = data.getJSONObject(h); 
           Log.e("getCheckedPos(getID)", String.valueOf(jsondata)); 
           check = PROJECT_ID.get(h); 
           Log.e("getCheckedPos(getID)", String.valueOf(jsondata)); 
           if (selected.contains(check)) { 
            selected.remove(check); 
            mCheck.setBackgroundResource(R.drawable.ic_favorite_white1_24dp); 
            Snackbar snackbar = Snackbar.make(v, "Property Unfavorited", Snackbar.LENGTH_SHORT); 
            snackbar.show(); 
            notifyItemRemoved(h); 
            Log.e("FOUND","found"); 
           } 
} catch (JSONException e) { 
           e.printStackTrace(); 
          } 
     } 
       }); 
try { 
         JSONObject jsonObject = new JSONObject(offlinejson); 
         JSONArray data = jsonObject.getJSONArray(TAG_DATA); 
         PROJECT_ID = new ArrayList<String>(); 
         PROJECT_TITLE = new ArrayList<String>(); 

         for (int j = 0, count = data.length(); j < count; j++) { 
          json = data.getJSONObject(j); 
          //JSONArray jsonArray = new JSONArray(json); 
          // Log.e("JSON", String.valueOf(json)); 

          if (selected.contains(String.valueOf(json.get(TAG_PROJECT_ID)))) { 
           try { 
            String name = json.getString(TAG_PROJECT_ID); 
            PROJECT_ID.add(name); 
            Log.e("array id added",name); 
            String name1 = json.getString(TAG_PROJECT_TITLE); 
            PROJECT_TITLE.add(name1); 
} catch (JSONException e) { 
            e.printStackTrace(); 
           } 
          } 
         } 

        } catch (JSONException e) { 
         e.printStackTrace(); 
        } 
       } 
      } 
     } 
    } 

注: 我不想使用getAdapterPosition()方法因爲它不適用於我的json結構。

+1

在不同類型的解決方案,你也可以用這一個 - 設置項目的ID中複選框,並在需要時獲得。例如:mCheck.setTag(); //(鍵,值)或(值)。並點擊該getTag()。 –

+1

當你設置點擊監聽器時,你不知道項目ID嗎?你似乎知道那個時候。如果是這樣的話,那麼你可以在創建它時將它傳遞給監聽器。 –

+0

@kedi可以提供詳細的解決方案嗎? –

回答