2011-08-09 68 views
0

我想设置一个微调项目的位置,但微调控件正在用来自数据库的数据的simplecursoradapter填充。我想从数据库中获取当前字符串,然后将微调器设置为该值。我知道,通过使用arrayadapter我可以从适配器获得的位置是这样的:Android:从SimpleCursorAdapter获取位置

String myString = queryData.getString(queryData.getColumnIndex("myString")); 

//cast to an ArrayAdapter 
mySpinnerAdapter adapter = (mySpinnerAdapter) mySpinner.getAdapter(); 
int spinnerPosition = ? 

//set the default according to value 
mySpinner.setSelection(spinnerPosition); 

但是,有没有办法让一个项目从SimpleCursorAdapter的位置?在过去,我总是在cursoradapter旁边构建一组我的微调数据,但这似乎是一种肮脏的方式。如果它虽然唯一途径...

回答

0

你可以通过这样获得该项目的位置:

ArrayList<View> views = new ArrayList<View>(); 
listView1.reclaimViews(views); 
for (int i = 0; i < views.size(); i++) 
{ 
    View v = views.get(i); 
    // Get the view's text value and compare it with your string here 
    // If the two strings match, store the position, which is 'i' in this case 
    // If your view is a textview, you would do this: 
    TextView tv = (TextView)v.findViewById(R.id.textView1); 
    if (tv.getText().toString().toLowerCase().compareTo(textToCompare.toLowerCase()) == 0) 
    { 
     // Store position here 
    } 
} 
+0

我想从SimpleCursorAdapter中获取位置,以便从数据库中设置一个spinners selected items。我无法使用微调对象的reclaimViews。是否有另一种方法可以用来实现相同? – ryandlf

+0

我想不出任何其他方式来实现你想要的东西,除非你做你已经在你的问题中说过的话。 –

0

即使我面临同样的问题。打破了我的头几个小时后,我找到了这个解决方案。 我希望它能帮助你。

/// value is column name in DB. take value from      
final String[] from = new String[] {"value"}; 
/// field in spinner. Put value into (keep "R.id.text1" as it is..) 
final int[] to = new int[]{R.id.text1}; 

// Get Database Access Object to interact with DB 

DataAccessObject dataAccessObject = new DataAccessObject(context); 

final Cursor valueCursor = dataAccessObject.querySpinnerValues(); 

final SimpleCursorAdapter simpleCursorAdapter = new SimpleCursorAdapter(
     context, R.layout.spinner_row_layout, valueCursor, 
     from , to);   

// when ever a field is selected in the spinner's "spinner.setOnItemSelectedListener" method will be called 
// and the primary key 
// associted with that particular value will be saved into "someFieldPkMap" map or you can choose other collection..or some 
// instance variable.. 
// 
// Note : Here i am fetching two columns fron DB. 
// 1. "_id" Primary key should always be "_id" otherwise it will not work 
// 2. "value" which will be displayed in the spinner. this column can be anything. but you need to map it. The way i did eg.. 

// final String[] from = new String[] {"value"}; /// value is column name in DB. take value from 
// final int[] to = new int[]{R.id.text1}; /// field in spinner. Put value into (keep "R.id.text1" as it is..) 
// 
spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parent, View view, int position, long id) 
    {   

     valueCursor.moveToPosition(position);      

     // Get the primary Key associated with the value... 
     // Use "someFieldPkMap" map to get the primary key 
     someFieldPkMap.put(fieldName, Integer.parseInt(valueCursor.getString(0)));       
    } 
    public void onNothingSelected(AdapterView<?> arg0) {} 
}); 

spinner.setAdapter(simpleCursorAdapter); 
+0

我将不得不尝试这个并发布我的结果。谢谢! – ryandlf