我正在處理一個項目,其中需要在recyclerView項目單擊後更改recyclerView的數據。我曾嘗試在setOnClickListener方法onBindViewHolder:更改RecyclerView項目上的DataSet點擊
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<Dataset> mDataset = Collections.emptyList();
private static Context sContext;
private SharedPreferences sharedPrefs;
// Create new views (invoked by layout manager)
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v = null;
sharedPrefs = Functions.getShPreferences(parent.getContext(), "selected_view");
viewType = sharedPrefs.getInt("selected_view", 0);
switch (viewType) {
case 0:
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_view, parent, false);
break;
case 1:
v = LayoutInflater.from(parent.getContext()).inflate(R.layout.grid_view, parent, false);
break;
}
// set the view's size, margins, paddings and layout parameters
return new ViewHolder(v);
}
// Replace the contents of a view (invoked by layout manager)
@Override
public void onBindViewHolder(final ViewHolder holder, int position) {
// - get element from your dataset at this position
// - replace the contents of the view with that element
final Dataset current = mDataset.get(position);
holder.mName.setText(current.getName());
holder.mIcon.setImageResource(current.getIconId());
holder.mLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// make your click listener here
String f = Functions.getRoot(current.getFile());
mDataset = Functions.getData(f);
new FileAdapter(sContext, f);
notifyDataSetChanged();
Toast.makeText(v.getContext(), f, Toast.LENGTH_SHORT).show();
}
});
}
// Return the size of your dataset (invoked by layout manager)
@Override
public int getItemCount() {
return mDataset.size();
}
@Override
public int getItemViewType(int position) {
return super.getItemViewType(position);
}
public static class ViewHolder extends RecyclerView.ViewHolder {
TextView mName;
ImageView mIcon;
RelativeLayout mLayout;
//TextView mFileDateModified;
public ViewHolder(View v) {
super(v);
mLayout = (RelativeLayout) v.findViewById(R.id.recycler_view_layout);
mName = (TextView) v.findViewById(R.id.file_name);
mIcon = (ImageView) v.findViewById(R.id.file_icon);
}
}
public MyAdapter(Context context, String ph) {
context = sContext;
mDataset = Functions.getData(ph);
}
}
我已經把這個代碼onBindViewHolder。但它不工作。任何幫助將不勝感激。謝謝。
是什麼*但它不工作*是什麼意思? – Blackbelt
我想說的是我試圖通過調用適配器來改變數據,但它不工作 – Apurva
'holder.layout.setOnClickListener'應該在你的適配器中,我錯了嗎? – Blackbelt