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結構。
在不同類型的解決方案,你也可以用這一個 - 設置項目的ID中複選框,並在需要時獲得。例如:mCheck.setTag(); //(鍵,值)或(值)。並點擊該getTag()。 –
當你設置點擊監聽器時,你不知道項目ID嗎?你似乎知道那個時候。如果是這樣的話,那麼你可以在創建它時將它傳遞給監聽器。 –
@kedi可以提供詳細的解決方案嗎? –