2015-02-10 19 views
5

Belirli CSV içeriğini tıklatılan liste öğesine görüntülemeye çalışıyorum ancak geçerli kodumla, yalnızca tüm CSV dosyasını görüntüleyebilirim. Örneğin, 2. seviyeye tıkladığımda tüm CVS listesi görüntülenir, ancak burada yapmaya çalıştığım şey, yalnızca CSV'nin 2. düzey elemanlarını göstermektir.Belirli CSV içeriğini tıklanan liste öğesine nasıl görüntüleyebilirim?

Bu benim ilk görünümüdür: Bu seviye 2 tıklandığında alıyorum görünümüdür

enter image description here
:

Exercises list

Ama burada, seviye 1 CSV elemanları da gösterilecek olan, Seviye 2 elemanlarını nasıl görüntüleyebilirim? Ve "Seviye 1" tıklandığında, sadece seviye 1 elemanlarının nasıl görüntüleneceği? vb ...

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

} Burada

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

Benim ItemArrayAdapter.java sınıf

CSVFile.java benim dosya olduğunu 210
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); 
     } 

    } 
} 

Ve nihayet, benim CSV dosyasının hızlı bir görünümü, stimulis.csv

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

bu mümkün mü?

+1

Ve 'Seviye 1' seçeneğini tıklarsanız, diplayed nedir? Nasıl oluyor da iki metin boyutunuz var? – greenapps

+1

"** seviye ** 2" yerine, altında aynı CSV listesiyle görüntülenen "** seviye 1 **" olacak. .XML dosyalarında belirttiğim için iki metin boyutum var. –

+0

Bu yüzden bir seviye için doğru çizgileri filtreleyemezsiniz. Ya da doğru seviyeyi belirleyemezsin. Tam olarak sorunun nedir? Not: Kodunuza henüz bakmadım. – greenapps

cevap

1

Korkarım ki bu mümkün değil.

İlgili konular