gpt4 book ai didi

android - 创建自定义简单游标适配器

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:53:38 24 4
gpt4 key购买 nike

我想创建一个非常简单的光标自定义光标适配器,以便在单击时更改行项目的颜色。使用以下代码

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;

}

我从这个线程 https://stackoverflow.com/a/7649880/498449 得到了代码

我会使用一个简单的游标适配器并将代码放在 onClick 中,但是因为 ListFragment 中的默认列表重用 View ,当您滚动多个 View 时,它们会显示为突出显示。在 IRC 上,有人建议我创建一个自定义光标适配器。但是,我似乎无法找到如何执行此操作的最佳实践,以及上述代码 fragment 适合的位置。非常感谢您的帮助。

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

}

我已经用我在网上找到的一些代码更新了游标适配器。但是,我有两个问题。 1. 我正在使用游标加载器,所以我没有要传递给构造函数的“游标”对象。 2. 我从 Eclipse 收到一条警告,指出构造函数已被弃用。

最佳答案

你应该可以那样做:

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

}

关于android - 创建自定义简单游标适配器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9690439/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com