داخل این کد چک میکنم اگه لایک نشده بود هنگام کلیک آیکن تبدیل به لایک میشه و به دیتابیس یکی اضافه میکنه، اگه هم لایک شده بود آیکن تبدیل به آنلایک میشه و داخل دیتابیس یکی کم میشه، البته اینکه بفهمه لایک کرده یا نه رو داخل preference وارد کردم
بروز خطا
[message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ
ایجاد سیستم like (حل شده)
مدیریت گفتگو
آخرین تغییر: 11 سال پیش
سلام دوستان
من داخل برنامم سیستم like گذاشتم که هر بار روی شکل
کلیک شد اون به حالت تو پر در میاد، اما زمانی که برمیگردم و دوباره وارد صفحه میشم شکل از حالت تو پر در اومده!! از sharedPreferences هم استفاده کردم اما فرقی نکرد.
ممنون میشم راهنماییم کنید
پاسخها 3
private void checkLike() {
ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("brand_id", "" + G.selectedBrand.id));
SharedPreferences.Editor editor = G.preferences.edit();
boolean likeCheck = G.preferences.getBoolean("" + G.selectedBrand.id, false);
final ImageView imgLikeDetail = (ImageView) findViewById(R.id.imgLikeDetail);
if (likeCheck == false) {
imgLikeDetail.setImageResource(R.drawable.icon_like);
editor.putBoolean("" + G.selectedBrand.id, true);
G.selectedBrand.like += 1;
Toast.makeText(G.currentActivity, "Liked", Toast.LENGTH_SHORT).show();
} else {
imgLikeDetail.setImageResource(R.drawable.icon_unlike);
editor.putBoolean("" + G.selectedBrand.id, false);
G.selectedBrand.like -= 1;
Toast.makeText(G.currentActivity, "unLiked", Toast.LENGTH_SHORT).show();
}
editor.commit();
params.add(new BasicNameValuePair("brand_like", "" + G.selectedBrand.like));
Webservice.readUrl("http://192.168.56.1/negahe-novin/?action=like", params);
}
}
نظرات
این تابع رو چه زمانی اجرا میکنید؟ زمانی که روی آیکون کلیک میشه؟
شما هم باید واسه موقعی که روی آیکون کلیک میشه کد بذارید هم واسه وقتی که صفحه میخواد اجرا بشه.
موقعی که روی آیتم کلیک میشه این کارو کردم، وقتی صفحه اجرا میشه چطوری کد رو اجرا کنم؟ داخل متد onResume نوشتمش نشد
راستش من نمیدونم کداتون چه شکلیه ولی در تمام ImageView هایی که آیکون در اون ها هست باید این شرط رو بذارید که اگر برند مربوط به اون ImageView لایک شده بود آِیکون لایک رو ست کنه در غیر این صورت unlike. نباید سخت باشه. فکر کنم اگر داخل onCreate هم بذارید مشکلی نداشته باشه. توی onResume هم باید کار کنه.
منم این تابعو داخل onCreate فراخوانی کردم اما set نمیشه!!! ممنون از پاسختون
اون تابعو نباید فراخوانی کنید. اون تابع فقط واسه کلیک کردن جواب میده. شاید اگر کداتونو میذاشتید راحت تر میشد راهنمایی کرد. اما کاری که میتونید بکنید اینه که مقدار سورس ImageView رو از xml ست نکنید. بلکه توی کد برنامه واسه تک تک ImageView ها شرط بذارید و مقدارش رو با همون imgLikeDetail.setImageResource(R.drawable.icon_like); ست کنید. آیتم هاتون داخل لیست ویو هستن یا داخل خود اکتیویتی؟
کد کاملم اینه:
public class ActivityDetail extends EnhancedActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_detail);
LinearLayout linearLikeDetail = (LinearLayout) findViewById(R.id.linearLikeDetail);
linearLikeDetail.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
boolean likeCheck = G.preferences.getBoolean("" + G.selectedBrand.id, false);
if (G.preferences.getBoolean("IS_SIGNE", false) == false) {
Toast.makeText(G.currentActivity, R.string.like_signin, Toast.LENGTH_SHORT).show();
} else {
checkLike();
}
}
});
}
نظرات
داخل این کد نوشتم اگه کاربر وارد حساب کاربریش نشده بود اخطار بده اما اگه وارد شده بود تابع checkLike رو بخونه که بالا نوشتم
یعنی کل کدا همینه؟ فقط یه دونه ImaveView واسه لایک داخل صفحه دارید؟! اون وقت G.selectedBrand از کجا پر میشه؟ با این اطلاعات محدود من این پیشنهادو میتونم بدم همین چند خط کد رو بذارید داخل onCreate ببینید کار میکنه:
ImageView imgLikeDetail = (ImageView) findViewById(R.id.imgLikeDetail);
boolean likeCheck = G.preferences.getBoolean("" + G.selectedBrand.id, false);
if(likeCheck){
imgLikeDetail.setImageResource(R.drawable.icon_like);
}
else{
imgLikeDetail.setImageResource(R.drawable.icon_unlike);
}
ببخشید اینجا به هم ریخت الان میذارم پایین
مطمینا که کدهام بیشتره اما این قسمتش مربوط به سوالمه، کدتون ناخواناست بی زحمت داخل پاسخ بنویسید و از تگ استفاده کنید که خوانا بشه، مرسی
ImageView imgLikeDetail = (ImageView) findViewById(R.id.imgLikeDetail);
if(G.preferences.getBoolean("" + G.selectedBrand.id, false)){
imgLikeDetail.setImageResource(R.drawable.icon_like);
}
else{
imgLikeDetail.setImageResource(R.drawable.icon_unlike);
}
نظرات
آقا دمت گرم، درست شد، حالا مشکل کدم رو متوجه شدم، من زمانی که کلیک میکردم روی آیکن میگفتم تغییرش بده، و اول کد اونو نمیخوندم
خوشحالم مشکلت حل شد. تو این شبا ما رم دعا کن.
محتاجیم به دعا، آقا یه سوال دیگه: من لایک رو انجام میدم، دقتی به صفحه قبل برمیگردم یه لیست ویو دارم که تعداد لایک رو برام مینویسه، اما این تعداد لایک رو آپدیت نکرده و زمانی که از برنامه میام بیرون و مجدد داخل میشم آپدیت میشه، چطوری اینو درستش کنم
باید وقتی لایک انجام میشه و تعدادش رو از هر طریقی به دست میارید مقدار جدیدش رو بریزید داخل ArrayList ای که داخل لیست ویو نمایشش میدید و داخل متد onResume اکتیویتی هم این کد رو بذارید:
if (adapter != null) adapter.notifyDataSetChanged();
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .
ویرایش
پیام
نظرات