Próbuję wyświetlić określoną zawartość CSV na pozycji z kliknięciami, ale przy moim bieżącym kodzie mogę wyświetlić tylko cały plik CSV. Tutaj, na przykład, kiedy klikam na poziomie 2, wyświetlana jest cała lista CVS, ale staram się tutaj tylko pokazać elementy poziomu 2 pliku CSV.Jak wyświetlić określoną treść CSV na pozycji z kliknięciami?
To jest mój pierwszy widok:
To jest widok dostaję gdy poziom 2 kliknięcia:
Ale tutaj, elementy Poziom 1 CSV są również wyświetlane, jak mogę wyświetlać tylko elementy poziomu 2? A kiedy kliknięto "Poziom 1", jak wyświetlić tylko elementy poziomu 1? etc ...
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);
}
});
}
}
Oto mój plik 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;
}
}
Moja ItemArrayAdapter.java klasa
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);
}
}
}
I wreszcie, szybkie widok z mojego pliku CSV, stimulis.csv
level 1,feu
level 1,fête
level 2,blanc
level 2,blague
...
Czy to możliwe?
Co wyświetla się po kliknięciu "Poziom 1"? Dlaczego masz dwa rozmiary tekstu? – greenapps
Zamiast "** level ** 2", będę miał "** level 1 **" wyświetlany z tą samą listą CSV pod nim. Mam dwa rozmiary tekstu, ponieważ określiłem je w plikach .XML. –
Nie można odfiltrować właściwych linii dla poziomu. Lub nie możesz określić właściwego poziomu. Jaki jest dokładnie twój problem? Uwaga: jeszcze nie obejrzałem Twojego kodu. – greenapps