每个卡视图中都有一个微调器-recyclerview中的卡视图

时间:2018-09-22 06:12:28

标签: android android-recyclerview

我正在遵循本教程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。 (如果单击该教程,您将看到他们的代码)我很困惑如何将上面的代码与本教程的情况集成在一起?

2 个答案:

答案 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适配器中的布局。现在应该可以使用了。