RecyclerView 中的 CardView - 微调器
CardView in RecyclerView - spinners
我正在学习本教程 https://inducesmile.com/android/android-recyclerview-and-cardview-in-material-design-tutorial/
我以前的应用程序文件有它,所以微调器是由一个 csv 文件填充的。现在我正在制作另一个应用程序文件,因为我想通过使用 cardviews 和 recyclerview 重新开始。
但是,我在尝试使用回收器视图和卡片视图将我以前的微调器代码实施到这个新的应用程序文件中时遇到了一些麻烦。
上面链接的示例调用了一个名为 ItemObject.java 的 class。我假设这是我放置读取 csv 的代码的地方。
ItemObject class
public class ItemObject {
Spinner spinner;
public void setText(String spinner) {
private Map<String, String> numberItemValues = new HashMap<>();
private class CSVFile {
InputStream inputStream;
public CSVFile(InputStream inputStream) {
this.inputStream = inputStream;
}
public List<String> read() {
List<String> resultList = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
try {
String line;
while ((line = reader.readLine()) != null) {
String[] row = line.split(",");
//TODO I edited this part so that you'd add the values in our new hash map variable
numberItemValues.put(row[1], row[0]);
resultList.add(row[1]);
}
} catch (IOException e) {
Log.e("Main", e.getMessage());
} finally {
try {
inputStream.close();
} catch (IOException e) {
Log.e("Main", e.getMessage());
}
}
return resultList;
}
}
}
}
然后示例调用 RecyclerViewAdatper。 我不知道在 OnBindViewHolder 部分放什么。 应该放在那里,与我的微调器有什么关系?
RecyclerViewAdapter class
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {
private List<ItemObject> itemList;
private Context context;
public RecyclerViewAdapter(Context context, List<ItemObject> itemList) {
this.itemList = itemList;
this.context = context;
}
@Override
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_products, null);
RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView);
return rcv;
}
@Override
public void onBindViewHolder(RecyclerViewHolders holder, int position) {
// **WHAT TO PUT HERE**
//holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
}
@Override
public int getItemCount() {
return this.itemList.size();
}
}
这里是 RecyclerViewHolders class 仅供大家参考。
public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView countryName;
public ImageView countryPhoto;
public Spinner spinner;
public TextView textView5;
public CheckBox checkBox;
public EditText editText;
public RecyclerViewHolders(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
/* countryName = (TextView)itemView.findViewById(R.id.country_name);
countryPhoto = (ImageView)itemView.findViewById(R.id.country_photo);*/
spinner = (Spinner)itemView.findViewById(R.id.spinner);
textView5 = (TextView)itemView.findViewById(R.id.textView5);
checkBox = (CheckBox)itemView.findViewById(R.id.checkBox);
editText = (EditText)itemView.findViewById(R.id.editText);
}
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "Clicked Country Position = " + getPosition(), Toast.LENGTH_SHORT).show();
}
}
您可以将字符串数组形式的 CSV 值传递给您的 recyleview adpater 构造函数。您可以使用这些值来填充像这样的微调器
String [] spinnerValues;
public RecyclerViewAdapter(Context context, List<ItemObject> itemList, String [] spinnerValues) {
this.itemList = itemList;
this.context = context;
this.spinnerValues = spinnerValues
}
在您的适配器中将 View Holder class 设为内部 class 并使用以下代码。
spinner = (Spinner)itemView.findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_item, YOUR_STRING_ARRAY);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
我正在学习本教程 https://inducesmile.com/android/android-recyclerview-and-cardview-in-material-design-tutorial/
我以前的应用程序文件有它,所以微调器是由一个 csv 文件填充的。现在我正在制作另一个应用程序文件,因为我想通过使用 cardviews 和 recyclerview 重新开始。
但是,我在尝试使用回收器视图和卡片视图将我以前的微调器代码实施到这个新的应用程序文件中时遇到了一些麻烦。
上面链接的示例调用了一个名为 ItemObject.java 的 class。我假设这是我放置读取 csv 的代码的地方。
ItemObject class
public class ItemObject {
Spinner spinner;
public void setText(String spinner) {
private Map<String, String> numberItemValues = new HashMap<>();
private class CSVFile {
InputStream inputStream;
public CSVFile(InputStream inputStream) {
this.inputStream = inputStream;
}
public List<String> read() {
List<String> resultList = new ArrayList<String>();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
try {
String line;
while ((line = reader.readLine()) != null) {
String[] row = line.split(",");
//TODO I edited this part so that you'd add the values in our new hash map variable
numberItemValues.put(row[1], row[0]);
resultList.add(row[1]);
}
} catch (IOException e) {
Log.e("Main", e.getMessage());
} finally {
try {
inputStream.close();
} catch (IOException e) {
Log.e("Main", e.getMessage());
}
}
return resultList;
}
}
}
}
然后示例调用 RecyclerViewAdatper。 我不知道在 OnBindViewHolder 部分放什么。 应该放在那里,与我的微调器有什么关系?
RecyclerViewAdapter class
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewHolders> {
private List<ItemObject> itemList;
private Context context;
public RecyclerViewAdapter(Context context, List<ItemObject> itemList) {
this.itemList = itemList;
this.context = context;
}
@Override
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout_products, null);
RecyclerViewHolders rcv = new RecyclerViewHolders(layoutView);
return rcv;
}
@Override
public void onBindViewHolder(RecyclerViewHolders holder, int position) {
// **WHAT TO PUT HERE**
//holder.countryPhoto.setImageResource(itemList.get(position).getPhoto());
}
@Override
public int getItemCount() {
return this.itemList.size();
}
}
这里是 RecyclerViewHolders class 仅供大家参考。
public class RecyclerViewHolders extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView countryName;
public ImageView countryPhoto;
public Spinner spinner;
public TextView textView5;
public CheckBox checkBox;
public EditText editText;
public RecyclerViewHolders(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
/* countryName = (TextView)itemView.findViewById(R.id.country_name);
countryPhoto = (ImageView)itemView.findViewById(R.id.country_photo);*/
spinner = (Spinner)itemView.findViewById(R.id.spinner);
textView5 = (TextView)itemView.findViewById(R.id.textView5);
checkBox = (CheckBox)itemView.findViewById(R.id.checkBox);
editText = (EditText)itemView.findViewById(R.id.editText);
}
@Override
public void onClick(View view) {
Toast.makeText(view.getContext(), "Clicked Country Position = " + getPosition(), Toast.LENGTH_SHORT).show();
}
}
您可以将字符串数组形式的 CSV 值传递给您的 recyleview adpater 构造函数。您可以使用这些值来填充像这样的微调器
String [] spinnerValues;
public RecyclerViewAdapter(Context context, List<ItemObject> itemList, String [] spinnerValues) {
this.itemList = itemList;
this.context = context;
this.spinnerValues = spinnerValues
}
在您的适配器中将 View Holder class 设为内部 class 并使用以下代码。
spinner = (Spinner)itemView.findViewById(R.id.spinner);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(),
android.R.layout.simple_spinner_item, YOUR_STRING_ARRAY);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);