我正在使用CommonsGuy的拖放示例,我基本上尝试将其与Android记事本示例集成。
在2个不同的拖放示例中,我看到他们都使用了静态字符串数组,因为我从数据库中获取列表并使用简单的游标适配器。
所以我的问题是如何将简单游标适配器的结果转换为字符串数组,但仍然让它在单击列表项时返回行id,这样我就可以将它传递给编辑注释的新活动。 / p>
这是我的代码:
Cursor notesCursor = mDbHelper.fetchAllNotes();
startManagingCursor(notesCursor);
// Create an array to specify the fields we want to display in the list (only NAME)
String[] from = new String[]{WeightsDatabase.KEY_NAME};
// and an array of the fields we want to bind those fields to (in this case just text1)
int[] to = new int[]{R.id.weightrows};
// Now create a simple cursor adapter and set it to display
SimpleCursorAdapter notes =
new SimpleCursorAdapter(this, R.layout.weights_row, notesCursor, from, to);
setListAdapter(notes);
以下是我正在努力解决的代码。
public class TouchListViewDemo extends ListActivity {
private static String[] items={"lorem", "ipsum", "dolor", "sit", "amet",
"consectetuer", "adipiscing", "elit", "morbi", "vel",
"ligula", "vitae", "arcu", "aliquet", "mollis",
"etiam", "vel", "erat", "placerat", "ante",
"porttitor", "sodales", "pellentesque", "augue", "purus"};
private IconicAdapter adapter=null;
private ArrayList<String> array=new ArrayList<String>(Arrays.asList(items));
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
adapter=new IconicAdapter();
setListAdapter(adapter);
TouchListView tlv=(TouchListView)getListView();
tlv.setDropListener(onDrop);
tlv.setRemoveListener(onRemove);
}
private TouchListView.DropListener onDrop=new TouchListView.DropListener() {
@Override
public void drop(int from, int to) {
String item=adapter.getItem(from);
adapter.remove(item);
adapter.insert(item, to);
}
};
private TouchListView.RemoveListener onRemove=new TouchListView.RemoveListener() {
@Override
public void remove(int which) {
adapter.remove(adapter.getItem(which));
}
};
class IconicAdapter extends ArrayAdapter<String> {
IconicAdapter() {
super(TouchListViewDemo.this, R.layout.row2, array);
}
public View getView(int position, View convertView,
ViewGroup parent) {
View row=convertView;
if (row==null) {
LayoutInflater inflater=getLayoutInflater();
row=inflater.inflate(R.layout.row2, parent, false);
}
TextView label=(TextView)row.findViewById(R.id.label);
label.setText(array.get(position));
return(row);
}
}
}
我知道我要求很多,但正确方向上的一点会有所帮助! 感谢
答案 0 :(得分:3)
您无法将SimpleCursorAdapter
与TouchListView
一起使用,原因很简单,SimpleCursorAdapter
无法修改。 Adapter
必须更改其数据以反映和拖放操作。
简单而有些笨重的解决方案是迭代Cursor
并从该数据中创建ArrayList
某些内容,然后将ArrayList
与ArrayAdapter
一起使用和TouchListView
。
灵活而复杂的解决方案是创建一个位于ListAdapter
和TouchListView
之间的装饰SimpleCursorAdapter
,并了解您的拖放数据更改并动态应用它们。例如,如果用户交换位置5和6,当TouchListView
调用getView()
获取位置5时,装饰适配器将知道从SimpleCursorAdapter
获取位置6的行。