我正在遵循本教程https://www.simplifiedcoding.net/android-recyclerview-cardview-tutorial/,但是我的要求有所不同。 我不想像教程一样设置名称,描述,等级等值,而是希望拥有一个微调器,在每个Cardview中编辑文本,文本框和复选框。 (当用户按下FAB按钮时,会添加另一个卡片视图,其中也包含微调器,文本框,复选框和编辑文本)
但是,问题是,微调器由csv文件中的项目填充,这就是我遇到的问题。我有一个以前的程序文件,没有卡视图和回收站视图,在微调器中填充了csv文件值,并且当您按FAB键时,会出现微调器。但是,我无法将回收者视图与此集成。
在我以前的程序文件中,我有一个MyListAdapter.java。我相信这是微调器的适配器。
public class MyListAdapter extends ArrayAdapter<String> {
int groupid;
List<String> items;
Context context;
String path;
public MyListAdapter(Context context, int vg, int id, List<String> items) {
super(context, vg, id, (List<String>) items);
this.context = context;
groupid = vg;
this.items = items;
}
static class ViewHolder {
public TextView textid;
public TextView textname;
}
@Override
public View getDropDownView(int position, View convertView, ViewGroup parent) {
{
View rowView = convertView;
if (rowView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
rowView = inflater.inflate(groupid, parent, false);
ViewHolder viewHolder = new ViewHolder();
viewHolder.textid = (TextView) rowView.findViewById(R.id.txtid);
viewHolder.textname = (TextView) rowView.findViewById(R.id.txtname);
rowView.setTag(viewHolder);
}
// Fill data in the drop down.
ViewHolder holder = (ViewHolder) rowView.getTag();
String row = items.get(position);
//holder.textid.setText(row[0]); //prints aisle number, dont need
holder.textname.setText(row);
return rowView;
}
}
}
此外,在我的维护中,我有这段代码读取了csv文件。
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;
}
}
但是本教程要求提供两个类,Product.java和product adapter.java。 (如果单击该教程,您将看到他们的代码)我很困惑如何将上面的代码与本教程的情况集成在一起?
答案 0 :(得分:1)
*-首先用所需项目创建您的recyclerview行布局xml文件
*-在您的主要活动或片段中加载csv文件,并将其传递给适配器,在适配器构造函数中声明参数
*-在您的recuclerview适配器类中,在onCreateViewHolder方法中会将该布局充气(就像示例一样)
*-在您的RecyclerView.ViewHolder构造函数中,像Spinner等一样获得所有组件,就像示例
TextView textViewTitle = itemView.findViewById(R.id.textViewTitle);
...
Spinner spinner = itemView.findViewById(R.id.spinner);
*-在您的onBindViewHolder方法中,使用已加载的csv文件填充微调器,与之前相同
ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, spinnerArray);
spinner.setAdapter(adapter);//mContext should be passed from your activity to your adapter, so you should add it to your adapter constructor
答案 1 :(得分:1)
首先,如果只需要显示带有字符串列表的简单微调器,则不需要微调器自定义适配器。将以下代码段添加到您的onBindViewHolder()
方法中,以填充微调器。
String[] dataArray = new String[]{"Spinner data1", "data 2"}
ArrayAdapter<String> adapter = new ArrayAdapter<String>(mContext, android.R.layout.simple_spinner_item, dataArray);
holder.spinner.setAdapter(adapter);
阅读本教程,并按照每个步骤进行操作,包括创建一个Product.java
类。创建一个布局,并将layout_product.xml
替换为新的布局。我在下面为您创建了一个代码,复制代码并重新排列组件以满足您的需要,然后将其粘贴到新的布局文件中。让我们调用新文件card_layout
。
card_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<android.support.v7.widget.CardView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<CheckBox
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Spinner
android:padding="7dp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:textAppearance="?android:textAppearanceMedium"
android:text="Hey, its me"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
</android.support.v7.widget.CardView>
我不了解TextBox部分,但如果尚不包含上述代码段,则可以自己添加。现在,用新的布局替换recyclerview适配器中的布局。现在应该可以使用了。