Mat*_*ton 5 android android-listview simplecursoradapter android-listfragment android-cursoradapter
我想创建一个非常简单的游标自定义游标适配器,以方便在点击时更改行项目的颜色.使用以下代码
private static int save = -1;
public void onListItemClick(ListView parent, View v, int position, long id) {
parent.getChildAt(position).setBackgroundColor(Color.BLUE);
if (save != -1 && save != position){
parent.getChildAt(save).setBackgroundColor(Color.BLACK);
}
save = position;
}
Run Code Online (Sandbox Code Playgroud)
我从这个线程获得了代码/sf/answers/535491631/
我会使用一个简单的游标适配器并将代码放在onClick中,但由于ListFragment中的默认列表重用了视图,因此滚动多个视图时会突出显示.谈到IRC,有人建议我创建一个自定义游标适配器.但是,我似乎无法找到如何执行此操作的最佳实践,以及上述代码段所适用的位置.可以非常感谢帮助.
public class AreaCursorAdapter extends CursorAdapter {
private Context context;
public AreaCursorAdapter(Context context, Cursor c) {
super(context, c);
// TODO Auto-generated constructor stub
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView list_item = (TextView)view.findViewById(android.R.id.text1);
list_item.setText(cursor.getString(cursor.getColumnIndex(INDICATOR_NAME)));
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
bindView(v, context, cursor);
return v;
}
}
Run Code Online (Sandbox Code Playgroud)
我用我在网上找到的一些代码更新了游标适配器.但是,我有两个问题.1.我正在使用游标加载器,所以我没有一个"游标"对象传递给构造函数.我从Eclipse收到一条警告,建议者已被弃用.
zap*_*apl 18
你应该能够这样做:
class YourListFragment extends ListFragmentOrSomethingElse {
private AreaCursorAdapter mAdapter;
@Override
public void onCreate() {
mAdapter = new AreaCursorAdapter(this, null);
setListAdapter(mAdapter);
}
@Override
public void onListItemClick(ListView parent, View v, int position, long id) {
mAdapter.setSelectedPosition(position);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
mAdapter.swapCursor(cursor);
// should reset that here maybe
mAdapter.setSelectedPosition(-1);
}
}
public class AreaCursorAdapter extends CursorAdapter {
private Context context;
private int mSelectedPosition;
LayoutInflater mInflater;
public AreaCursorAdapter(Context context, Cursor c) {
// that constructor should be used with loaders.
super(context, c, 0);
mInflater = LayoutInflater.from(context);
}
public void setSelectedPosition(int position) {
mSelectedPosition = position;
// something has changed.
notifyDataSetChanged();
}
@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView list_item = (TextView)view.findViewById(android.R.id.text1);
list_item.setText(cursor.getString(cursor.getColumnIndex(INDICATOR_NAME)));
int position = cursor.getPosition(); // that should be the same position
if (mSelectedPosition == position) {
view.setBackgroundColor(Color.RED);
} else {
view.setBackgroundColor(Color.WHITE);
}
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = mInflater.inflate(android.R.layout.simple_list_item_1, parent, false);
// edit: no need to call bindView here. That's done automatically
return v;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14572 次 |
| 最近记录: |