2015-02-10 17 views
5

我想顯示特定的CSV內容到單擊列表項,但使用我當前的代碼,我只能顯示整個CSV文件。在這裏例如,當我點擊2級時,所有的CVS列表都會顯示出來,但我在這裏要做的是僅顯示CSV的2級元素。如何顯示特定的CSV內容到點擊清單項目?

這是我的第一個觀點:

enter image description here
這是我得到的第2級被點擊時的觀點:

Exercises list

但在這裏,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); 
     } 
    }); 
} 

}

這裏是我的文件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; 
    } 
} 

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; 
    } 
} 

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); 
     } 

    } 
} 

最後,我的CSV文件的快速視圖,stimulis.csv

level 1,feu 
level 1,fête 
level 2,blanc 
level 2,blague 
... 

這可能嗎?

+1

如果您點擊「1級」,則顯示的是什麼?你怎麼有兩個文字大小? – greenapps 2015-02-10 14:08:55

+1

而不是「**等級** 2」,我將顯示「**等級1 **」,下面顯示相同的CSV列表。我有兩個文本大小,因爲我在.XML文件中指定了它。 – 2015-02-10 14:18:18

+0

所以你不能過濾掉一個關卡的正確行。或者你無法確定合適的級別。什麼是你的問題?注意:我沒有看你的代碼呢。 – greenapps 2015-02-10 15:10:10

回答

1

恐怕這是不可能的。