Java 在Android中更新CSV文件后更新Listview

Java 在Android中更新CSV文件后更新Listview,java,android,csv,android-listview,Java,Android,Csv,Android Listview,我的Android应用程序当前正在读取CSV文件中的数据,并将其显示在列表视图中,但是,一旦我将另一行添加到我的CSV文件中,我希望应用程序在单击刷新按钮时更新新添加的值。怎么做?任何帮助都将不胜感激 下面是代码 main活动类 ```public class MainActivity extends AppCompatActivity { private ListView listView; private ItemArrayAdapter itemArrayAdapter;

我的Android应用程序当前正在读取CSV文件中的数据,并将其显示在
列表视图中
,但是,一旦我将另一行添加到我的CSV文件中,我希望应用程序在单击刷新按钮时更新新添加的值。怎么做?任何帮助都将不胜感激

下面是代码

main活动类

```public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private ItemArrayAdapter itemArrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //init();
        listView = (ListView) findViewById(R.id.list_View);
        itemArrayAdapter = new ItemArrayAdapter(getApplicationContext(), R.layout.activity_premier_rostatus);

        Parcelable state = listView.onSaveInstanceState();
        listView.setAdapter(itemArrayAdapter);
        listView.onRestoreInstanceState(state);

        InputStream inputStream = getResources().openRawResource(R.raw.stats);
        CSVFile csvFile = new CSVFile(inputStream);
        List<String[]> scoreList = csvFile.read();

        for (String[] scoreData : scoreList) {
            itemArrayAdapter.add(scoreData);
        }

    }
}```
    private List<String[]> scoreList = new ArrayList<String[]>();

    static class ItemViewHolder {
        TextView name;
        TextView score;
    }

    public ItemArrayAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

    @Override
    public void add(String[] object) {
        scoreList.add(object);
        super.add(object);
    }

    @Override
    public int getCount() {
        return this.scoreList.size();
    }

    @Override
    public String[] getItem(int index) {
        return this.scoreList.get(index);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ItemViewHolder viewHolder;
        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) this.getContext().
                    getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.activity_premier_rostatus, parent,false);
            viewHolder = new ItemViewHolder();
            viewHolder.name =  row.findViewById(R.id.name);
            viewHolder.score = row.findViewById(R.id.score);
            row.setTag(viewHolder);
        } else {
            viewHolder = (ItemViewHolder)row.getTag();
        }
        String[] stat = getItem(position);
        viewHolder.name.setText(stat[0]);
        viewHolder.score.setText(stat[1]);
        return row;
    }
}```


**CSVFile Class**

```public 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 csvLine;
            while ((csvLine = reader.readLine()) != null) {
                String[] row = csvLine.split(",");
                resultList.add(row);
            }
        }
        catch (IOException ex) {
            throw new RuntimeException("Error in reading CSV file: "+ex);
        }
        finally {
            try {
                inputStream.close();
            }
            catch (IOException e) {
                throw new RuntimeException("Error while closing input stream: "+e);
            }
        }
        return resultList;
    }
}```

**activity_main.xml**



 ```android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/list_View"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="@dimen/margin_top"```



公共类MainActivity扩展了AppCompatActivity{ 私有列表视图列表视图; 私有ItemArrayAdapter ItemArrayAdapter; @凌驾 创建时受保护的void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //init(); listView=(listView)findViewById(R.id.list\u视图); itemArrayAdapter=新的itemArrayAdapter(getApplicationContext(),R.layout.activity\u premier\u rostatus); Parcelable状态=listView.onSaveInstanceState(); setAdapter(itemArrayAdapter); onRestoreInstanceState(状态); InputStream InputStream=getResources().openRawResource(R.raw.stats); CSVFile CSVFile=新的CSVFile(inputStream); List scoreList=csvFile.read(); 对于(字符串[]scoreData:scoreList){ itemArrayAdapter.add(scoreData); } } }``` ItemArrayAdapter类

```public class MainActivity extends AppCompatActivity {
    private ListView listView;
    private ItemArrayAdapter itemArrayAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //init();
        listView = (ListView) findViewById(R.id.list_View);
        itemArrayAdapter = new ItemArrayAdapter(getApplicationContext(), R.layout.activity_premier_rostatus);

        Parcelable state = listView.onSaveInstanceState();
        listView.setAdapter(itemArrayAdapter);
        listView.onRestoreInstanceState(state);

        InputStream inputStream = getResources().openRawResource(R.raw.stats);
        CSVFile csvFile = new CSVFile(inputStream);
        List<String[]> scoreList = csvFile.read();

        for (String[] scoreData : scoreList) {
            itemArrayAdapter.add(scoreData);
        }

    }
}```
    private List<String[]> scoreList = new ArrayList<String[]>();

    static class ItemViewHolder {
        TextView name;
        TextView score;
    }

    public ItemArrayAdapter(Context context, int textViewResourceId) {
        super(context, textViewResourceId);
    }

    @Override
    public void add(String[] object) {
        scoreList.add(object);
        super.add(object);
    }

    @Override
    public int getCount() {
        return this.scoreList.size();
    }

    @Override
    public String[] getItem(int index) {
        return this.scoreList.get(index);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        ItemViewHolder viewHolder;
        if (row == null) {
            LayoutInflater inflater = (LayoutInflater) this.getContext().
                    getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            row = inflater.inflate(R.layout.activity_premier_rostatus, parent,false);
            viewHolder = new ItemViewHolder();
            viewHolder.name =  row.findViewById(R.id.name);
            viewHolder.score = row.findViewById(R.id.score);
            row.setTag(viewHolder);
        } else {
            viewHolder = (ItemViewHolder)row.getTag();
        }
        String[] stat = getItem(position);
        viewHolder.name.setText(stat[0]);
        viewHolder.score.setText(stat[1]);
        return row;
    }
}```


**CSVFile Class**

```public 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 csvLine;
            while ((csvLine = reader.readLine()) != null) {
                String[] row = csvLine.split(",");
                resultList.add(row);
            }
        }
        catch (IOException ex) {
            throw new RuntimeException("Error in reading CSV file: "+ex);
        }
        finally {
            try {
                inputStream.close();
            }
            catch (IOException e) {
                throw new RuntimeException("Error while closing input stream: "+e);
            }
        }
        return resultList;
    }
}```

**activity_main.xml**



 ```android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/list_View"
    android:layout_alignParentTop="true"
    android:layout_centerHorizontal="true"
    android:layout_marginTop="@dimen/margin_top"```



private List scoreList=new ArrayList();
静态类ItemViewHolder{
文本视图名称;
文本视图分数;
}
公共项ArrayAdapter(上下文,int textViewResourceId){
super(上下文,textViewResourceId);
}
@凌驾
公共void添加(字符串[]对象){
添加(对象);
super.add(object);
}
@凌驾
public int getCount(){
返回此.scoreList.size();
}
@凌驾
公共字符串[]getItem(int索引){
返回此.scoreList.get(索引);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
项目视图持有者视图持有者;
if(行==null){
LayoutInflater充气器=(LayoutInflater)this.getContext()。
getSystemService(上下文布局\充气机\服务);
row=充气机。充气(R.layout.activity\u premier\u rostatus,父级,false);
viewHolder=新项目viewHolder();
viewHolder.name=row.findViewById(R.id.name);
viewHolder.score=row.findViewById(R.id.score);
row.setTag(viewHolder);
}否则{
viewHolder=(ItemViewHolder)row.getTag();
}
字符串[]stat=getItem(位置);
viewHolder.name.setText(stat[0]);
viewHolder.score.setText(stat[1]);
返回行;
}
}```
**CSVFile类**
```公共类CSVFile{
输入流输入流;
公共CSVFile(InputStream InputStream){
this.inputStream=inputStream;
}
公共列表读取(){
List resultList=new ArrayList();
BufferedReader reader=新的BufferedReader(新的InputStreamReader(inputStream));
试一试{
弦线;
而((csvLine=reader.readLine())!=null){
字符串[]行=csvLine.split(“,”);
结果列表.添加(行);
}
}
捕获(IOEX异常){
抛出新的RuntimeException(“读取CSV文件时出错:“+ex”);
}
最后{
试一试{
inputStream.close();
}
捕获(IOE异常){
抛出新的RuntimeException(“关闭输入流时出错:“+e”);
}
}
返回结果列表;
}
}```
**activity_main.xml**
```android:layout\u width=“匹配父项”
android:layout\u height=“match\u parent”
android:id=“@+id/list\u视图”
android:layout\u alignParentTop=“true”
android:layout\u centerHorizontal=“true”
android:layout_marginTop=“@dimen/margin_top”```

根据您的需要,如果您只想添加一个项目,您可以使用现有的适配器功能
add
,或者您可以实现另一个适配器功能一次设置所有列表

需要时,可以使用新项目或列表执行此
add
或new函数,然后需要调用
notifyDataSetChanged

itemArrayAdapter.add( NewItem);
itemArrayAdapter.notifyDataSetChanged();

在最后一种情况下,您需要实现新的
addAllItemsInATime
(或您想要的名称)函数,如下所示:

public void addAllItemsInATime( List<String> newList) {
    this.scoreList = newList;
}
public void addAllItemsInATime(List newList){
this.scoreList=newList;
}

将适配器类视为一个保存数据的对象,并知道如何显示这些数据。因此,任何更改的数据都必须保存在适配器中并重新绘制。

根据您的需要,如果您只想添加一个项目,您可以使用现有的适配器功能
add
,或者您可以实现另一个适配器功能一次设置所有列表

需要时,可以使用新项目或列表执行此
add
或new函数,然后需要调用
notifyDataSetChanged

itemArrayAdapter.add( NewItem);
itemArrayAdapter.notifyDataSetChanged();

在最后一种情况下,您需要实现新的
addAllItemsInATime
(或您想要的名称)函数,如下所示:

public void addAllItemsInATime( List<String> newList) {
    this.scoreList = newList;
}
public void addAllItemsInATime(List newList){
this.scoreList=newList;
}

将适配器类视为一个保存数据的对象,并知道如何显示这些数据。因此,任何更改的数据都必须保存在适配器中并重新绘制。

您需要在适配器中实现任何函数,以接受新的
列表
和修改后的数据,并调用
notifyDataSetChanged
适配器函数重新绘制所有
列表视图
。您能给我举个例子吗@SuperG280您需要在适配器中实现任何函数,以使用修改后的数据接受新的
列表
,并调用
notifyDataSetChanged
适配器函数t