ورود

View Full Version : مشکل در متد SetOnTouchListener مربوط به آیتمهای ListView



saeidd
شنبه 22 آذر 1393, 09:15 صبح
سلام.

من یک ListView دارم که با متد getview آیتمهاش رو مقدار دهی می کنم. برای اینکه زمان لمس بر روی هر آیتم (کلیک) رنگ زمینه اش عوض بشه و زمان اتمام لمس دوباره به رنگ اولیه برگرده، متد SenOnTouchListener رو داخل همین getview نوشتم. به این صورت:

public View getView(int position, View convertView, ViewGroup parent) {


LayoutInflater in=getLayoutInflater();
View row=in.inflate(R.layout.row_onvan, parent,false);

if (position%2==0){

row.setBackgroundColor(Color.parseColor("#cadff7"));
}
else{
row.setBackgroundColor(Color.parseColor("#ebebeb"));
}

row.setOnTouchListener(new OnTouchListener() {

@Override
public boolean onTouch(View arg0, MotionEvent arg1) {


switch (arg1.getAction()) {
case MotionEvent.ACTION_DOWN: {
arg0.setBackgroundColor(Color.parseColor("#faba3a"));
break;
}


case MotionEvent.ACTION_UP:{
arg0.setBackgroundColor(Color.parseColor("#cadff7"));
break;
}
}
return false;
}
});


return (row);
}

حالا مشکلش اینه که موقع ACTION_DOWN رنگ زمینه رو درست عوض می کنه ولی موقع ACTION_UP برنمیگردونه سر جاش؛ یعنی اصلا دستورش اجرا نمیشه.

ایراد از چیه؟

#root#
شنبه 22 آذر 1393, 17:19 عصر
اگر هدفتون تغییر رنگ موقع انتخاب هست، به نظرم راه رو اشتباه رفتید، بهتر هست از Selector استفاده کنید.

saeidd
یک شنبه 23 آذر 1393, 07:39 صبح
اگر هدفتون تغییر رنگ موقع انتخاب هست، به نظرم راه رو اشتباه رفتید، بهتر هست از Selector استفاده کنید.
نه، هدفم تغییر رنگ موقع کلیک کردن هست.

#root#
یک شنبه 23 آذر 1393, 09:44 صبح
نه، هدفم تغییر رنگ موقع کلیک کردن هست.

حالا هرچی اسمشو بزاریم، راهه اصولیش همونه.

saeidd
یک شنبه 23 آذر 1393, 10:44 صبح
حالا هرچی اسمشو بزاریم، راهه اصولیش همونه.
از selector استفاده کردم، مشکلی که داره اینه که برای اینکه درست عمل کنه باید android:drawSelectorOnTop رو در فایل xml مربوط به ListView مقدارش رو True کنم، وقتی هم اینکار رو می کنم درست کار می کنه ولی رنگی که انتخاب کردم میاد روی نوشته مربوط به آیتم قرار میگیره و در نتیجه دیده نمیشه.

بعد هم رنگی که میخوام بهش بدم، میخوام در زمان اجرا تعیین کنم، امکانش هست؟

#root#
یک شنبه 23 آذر 1393, 11:14 صبح
از selector استفاده کردم، مشکلی که داره اینه که برای اینکه درست عمل کنه باید android:drawSelectorOnTop رو در فایل xml مربوط به ListView مقدارش رو True کنم، وقتی هم اینکار رو می کنم درست کار می کنه ولی رنگی که انتخاب کردم میاد روی نوشته مربوط به آیتم قرار میگیره و در نتیجه دیده نمیشه.

بعد هم رنگی که میخوام بهش بدم، میخوام در زمان اجرا تعیین کنم، امکانش هست؟

حالا مسئله یه چیز دیگست، اگه تو سوالتون اینا رو هم میگفتین بهتر بود، اگر مشکل Selector همرنگ شدنش با متن نوشته هست برای رنگ نوشته هم میتونید از Selector استفاده کنید تا حل بشه، اما هدفتون انگار تغییرات موقع اجرای برنامه هست.

saeidd
یک شنبه 23 آذر 1393, 20:29 عصر
selector با متن نوشته هم رنگ نمیشه ها، میاد رو آیتم قرار میگیره و در نتیجه متن آیتم دیده نمیشه، نه اینکه با اون همرنگ بشه، خب حالا چطور میتونم این مشکل رو حل کنم؟

#root#
یک شنبه 23 آذر 1393, 20:50 عصر
selector با متن نوشته هم رنگ نمیشه ها، میاد رو آیتم قرار میگیره و در نتیجه متن آیتم دیده نمیشه، نه اینکه با اون همرنگ بشه، خب حالا چطور میتونم این مشکل رو حل کنم؟

کدهای این row_onvan و selector رو بزارید ببینیم چی به چیه.