Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android SimpleCrsorAdapter重复项在bindView上单击操作_Android_Listview_Onclicklistener_Simplecursoradapter_Listviewitem - Fatal编程技术网

Android SimpleCrsorAdapter重复项在bindView上单击操作

Android SimpleCrsorAdapter重复项在bindView上单击操作,android,listview,onclicklistener,simplecursoradapter,listviewitem,Android,Listview,Onclicklistener,Simplecursoradapter,Listviewitem,尝试在listView子项上设置ClickListener以在单击时更改列表项背景,因此我自定义了SimpleCursorAdapter,如下所示。它可以工作,但也会更改屏幕外的其他列表项颜色(8)比单击的一步要慢,例如:如果单击的项目父位置为0,它也会在位置7处更改背景,以相同的方式为3到10,)。我还有一个setOnItemClickListener,工作正常。无法理解我做错了什么?提前感谢 以下是我的清单: public class EventsList extends Fragment

尝试在listView子项上设置ClickListener以在单击时更改列表项背景,因此我自定义了SimpleCursorAdapter,如下所示。它可以工作,但也会更改屏幕外的其他列表项颜色(8)比单击的一步要慢,例如:如果单击的项目父位置为0,它也会在位置7处更改背景,以相同的方式为3到10,)。我还有一个setOnItemClickListener,工作正常。无法理解我做错了什么?提前感谢

以下是我的清单:

public class EventsList extends Fragment {
private SQLiteHandler db;
private ListView lv;
// Store instance variables
private String title;
private int page;


// newInstance constructor for creating fragment with arguments
public static EventsList newInstance(int page, String title) {
    EventsList fragmentFirst = new EventsList();
    Bundle args = new Bundle();
    args.putInt("someInt", page);
    args.putString("someTitle", title);
    fragmentFirst.setArguments(args);
    return fragmentFirst;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    page = getArguments().getInt("someInt", 0);
    title = getArguments().getString("someTitle");
}


@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    db = new SQLiteHandler(getActivity().getApplicationContext());
    View view = inflater.inflate(R.layout.frag_event_list,container,false);
    lv = (ListView) view.findViewById(R.id.programs_list);

    makeMyList();
    return view;
}

public void makeMyList() {
    Cursor cursor = db.getEventsByDate(title);

    String[] source = new String[]
            {
                    AppConfig.EVENT_NAME,
                    AppConfig.EVENT_TIME,
            };

    int[] toView = new int[]
            {
                    R.id.event_title,
                    R.id.event_time,
            };

    ProgramsCA scA = new ProgramsCA
            (
                    getActivity(),
                    R.layout.list_program,
                    cursor,
                    source,
                    toView,
                    1
            );

    ListView myList = lv;
    myList.setAdapter(scA);
    clickMyListItem(myList);
}

public void clickMyListItem(ListView lv)
{
    lv.setOnItemClickListener(new AdapterView.OnItemClickListener(){
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
            Cursor cursor = (Cursor) adapterView.getItemAtPosition(i);
            int iCol_Name = cursor.getColumnIndex(AppConfig.EVENT_SERVER_ID);
            int sid = cursor.getInt(iCol_Name);

            Intent intent = new Intent(getActivity().getBaseContext(),
                    ItemActivity.class);
            intent.putExtra("icon", (int) R.drawable.ic_action_event);
            intent.putExtra("title", "Program Detail");
            intent.putExtra("s_id", (int) sid);
            getActivity().startActivity(intent);
        }
    });

}



public void myClickHandler(View v)
{
    ListView lvItems = lv;
    for (int i=0; i < lvItems.getChildCount(); i++)
    {
        lvItems.getChildAt(i).setBackgroundColor(Color.BLUE);
    }
    //get the row the clicked button is in
    RelativeLayout vwParentRow = (RelativeLayout)v.getParent();

    int c = Color.CYAN;

    vwParentRow.setBackgroundColor(c);
    vwParentRow.refreshDrawableState();
}





} 
公共类事件列表扩展了片段{
私有SQLiteHandler数据库;
私有ListView lv;
//存储实例变量
私有字符串标题;
私人网页;
//用于创建带有参数的片段的newInstance构造函数
公共静态事件列表newInstance(整型页面,字符串标题){
EventsList fragmentFirst=新的EventsList();
Bundle args=新Bundle();
args.putInt(“someInt”,第页);
args.putString(“someTitle”,title);
fragmentFirst.setArguments(args);
首先返回碎片;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
page=getArguments().getInt(“someInt”,0);
title=getArguments().getString(“someTitle”);
}
@可空
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
db=新的SQLiteHandler(getActivity().getApplicationContext());
视图=充气机。充气(右布局。碎片事件列表,容器,错误);
lv=(ListView)view.findViewById(R.id.programs\u list);
makeMyList();
返回视图;
}
public void makeMyList(){
Cursor Cursor=db.getEventsByDate(标题);
字符串[]源=新字符串[]
{
AppConfig.EVENT_名称,
AppConfig.EVENT\u时间,
};
int[]toView=newint[]
{
R.id.事件名称,
R.id.事件时间,
};
ProgramsCA=新的ProgramsCA
(
getActivity(),
R.layout.list_程序,
光标,
来源:,
托维尤,
1.
);
ListView myList=lv;
设置适配器(scA);
单击myList(我的列表);
}
公共作废clickMyListItem(ListView lv)
{
lv.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共无效onItemClick(AdapterView AdapterView、View视图、int i、long l){
游标游标=(游标)adapterView.getItemAtPosition(i);
int iCol\u Name=cursor.getColumnIndex(AppConfig.EVENT\u SERVER\u ID);
int sid=cursor.getInt(iCol_名称);
意向意向=新意向(getActivity().getBaseContext(),
项目活动类);
intent.putExtra(“图标”,(int)R.drawable.ic\u action\u事件);
意向。额外(“标题”、“计划详情”);
intent.putExtra(“s_id”,(int)sid);
getActivity().startActivity(意图);
}
});
}
公共无效myClickHandler(视图v)
{
ListView lvItems=lv;
对于(int i=0;i
然后在getView上添加:

if(position == selectedItem)
//set selected background color 
else 
//set normal background color 
onClick:

selectedItem = position;
notifiyDataSetChanged();
试试这个:

private int selectedItemSid = -1;

@Override
public void bindView(View view, final Context context, Cursor cursor) {
    super.bindView(view, context, cursor);

    final ImageView iv = (ImageView) view.findViewById(R.id.imageViewCalV);
    final RelativeLayout rl = (RelativeLayout) view.findViewById(R.id.fTheProgram);
    int iCol_Name = cursor.getColumnIndex(AppConfig.EVENT_SERVER_ID);
    final int sid = cursor.getInt(iCol_Name);
    if (sid == selectedItemSid) {
        iv.setBackgroundColor(Color.TRANSPARENT);
        rl.setBackgroundColor(Color.parseColor("#D98BC34A"));
    } else {//set normal background color,assume white
        iv.setBackgroundColor(Color.WHITE);
        rl.setBackgroundColor(Color.WHITE));
    }
    iv.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            selectedItemSid = sid;
            notifiyDataSetChanged();
        }
    });
 }

谢谢,但没有帮助
selectedItem = position;
notifiyDataSetChanged();
private int selectedItemSid = -1;

@Override
public void bindView(View view, final Context context, Cursor cursor) {
    super.bindView(view, context, cursor);

    final ImageView iv = (ImageView) view.findViewById(R.id.imageViewCalV);
    final RelativeLayout rl = (RelativeLayout) view.findViewById(R.id.fTheProgram);
    int iCol_Name = cursor.getColumnIndex(AppConfig.EVENT_SERVER_ID);
    final int sid = cursor.getInt(iCol_Name);
    if (sid == selectedItemSid) {
        iv.setBackgroundColor(Color.TRANSPARENT);
        rl.setBackgroundColor(Color.parseColor("#D98BC34A"));
    } else {//set normal background color,assume white
        iv.setBackgroundColor(Color.WHITE);
        rl.setBackgroundColor(Color.WHITE));
    }
    iv.setOnClickListener(new View.OnClickListener(){
        @Override
        public void onClick(View view) {
            selectedItemSid = sid;
            notifiyDataSetChanged();
        }
    });
 }