如何在单击的列表项中显示特定的CSV内容?

Jus*_*ger 5 csv import android android-listview

我正在尝试向单击的列表项显示特定的CSV内容,但是使用我当前的代码,我只能显示整个CSV文件.例如,当我点击第2级时,会显示所有CVS列表,但我在这里要做的只是显示CSV的2级元素.

这是我的第一个观点:

在此输入图像描述
这是我点击2级时获得的视图:

练习清单

但是在这里,还会显示1级CSV元素,如何才能显示2级元素?点击"1级"时,如何只显示1级元素?等等...

MainActivity.java

public class MainActivity extends ListActivity {


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // storing string resources into Array
    // R.array.levels is in list_levels.xml
    String[] levels = getResources().getStringArray(R.array.levels);

    // Binding resources Array to ListAdapter

    this.setListAdapter(new ArrayAdapter<String>(this, R.layout.list_item, R.id.label_level, levels));

    ListView lv = getListView();

    // listening to single list item on click
    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view,
                                int position, long id) {

            // selected item
            String list = ((TextView) view).getText().toString();

            // Launching new Activity on selecting single List Item
            Intent i = new Intent(getApplicationContext(), SingleListItem.class);
            // sending data to new activity
            i.putExtra("list", list);
            startActivity(i);
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

}

这是我的文件CSVFile.java

    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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的ItemArrayAdapter.java

 public class ItemArrayAdapter extends ArrayAdapter<String[]> {
    private List<String[]> stimuliList = new ArrayList<String[]>();

    static class ItemViewHolder {
        TextView level_number;
        TextView stimuli_name;
    }

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

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

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

    @Override
    public String[] getItem(int index) {
        return this.stimuliList.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.single_list_item_view, parent, false);
            viewHolder = new ItemViewHolder();
            viewHolder.level_number = (TextView) row.findViewById(R.id.level_number);
            viewHolder.stimuli_name = (TextView) row.findViewById(R.id.stimuli_name);
            row.setTag(viewHolder);
        } else {
            viewHolder = (ItemViewHolder)row.getTag();
        }
        String[] stat = getItem(position);
        viewHolder.level_number.setText(stat[0]);
        viewHolder.stimuli_name.setText(stat[1]);
        return row;
    }
}
Run Code Online (Sandbox Code Playgroud)

SingleListItem.java

    public class SingleListItem extends Activity{

    private ListView listView;
private ItemArrayAdapter itemArrayAdapter;
    @Override
    public void onCreate(Bundle savedInstanceState) {


        super.onCreate(savedInstanceState);
        this.setContentView(R.layout.single_list_item_view);


        TextView txtList = (TextView) findViewById(R.id.list_label);

        Intent i = getIntent();
        // getting attached intent data
        String list = i.getStringExtra("list");
        // displaying selected list name
        txtList.setText(list);


        listView = (ListView) findViewById(R.id.stimuli_list);
        itemArrayAdapter = new ItemArrayAdapter(getApplicationContext(), R.layout.single_list_item_view);

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

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

        for(String[] stimuliData:stimuliList ) {
            itemArrayAdapter.add(stimuliData );
        }

    }
}
Run Code Online (Sandbox Code Playgroud)

最后,快速查看我的CSV文件stimulis.csv

level 1,feu
level 1,fête
level 2,blanc
level 2,blague
...
Run Code Online (Sandbox Code Playgroud)

这可能吗 ?

小智 1

恐怕这是不可能的。