آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

ایجاد سیستم like (حل شده)

SaeiD-as  11 سال پیش  11 سال پیش
+1 0

سلام دوستان

من داخل برنامم سیستم like گذاشتم که هر بار روی شکل  کلیک شد اون به حالت تو پر در میاد، اما زمانی که برمیگردم و دوباره وارد صفحه میشم شکل از حالت تو پر در اومده!! از sharedPreferences هم استفاده کردم اما فرقی نکرد.

ممنون میشم راهنماییم کنید

+1 0
خوب ما که نمیدونیم شما چی نوشتید حتما یه جای کدا یه اشکالی داره دیگه. باید شرط بذارید اگر مثلا مقدار متغیر یا preference یا هر چی مثلا true بود شکل توپر رو روی imageView ست کنه در غیر اینصورت شکل غیرتوپر رو. اگر این کارو کردید و نشده باید کدا رو بذارید تا از دوستان اگر کسی تونست مشکلتون رو حل کنه. (11 سال پیش)
0 0
کدم رو پایین میزارم (11 سال پیش)
 برای این سوال 3 پاسخ وجود دارد.
پاسخ به سوال 
SaeiD-as  11 سال پیش
0 0

 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);
    }
}
0 0
داخل این کد چک میکنم اگه لایک نشده بود هنگام کلیک آیکن تبدیل به لایک میشه و به دیتابیس یکی اضافه میکنه، اگه هم لایک شده بود آیکن تبدیل به آنلایک میشه و داخل دیتابیس یکی کم میشه، البته اینکه بفهمه لایک کرده یا نه رو داخل preference وارد کردم (11 سال پیش)
+1 0
این تابع رو چه زمانی اجرا میکنید؟ زمانی که روی آیکون کلیک میشه؟ (11 سال پیش)
+1 0
شما هم باید واسه موقعی که روی آیکون کلیک میشه کد بذارید هم واسه وقتی که صفحه میخواد اجرا بشه. (11 سال پیش)
0 0
موقعی که روی آیتم کلیک میشه این کارو کردم، وقتی صفحه اجرا میشه چطوری کد رو اجرا کنم؟ داخل متد onResume نوشتمش نشد (11 سال پیش)
+1 0
راستش من نمیدونم کداتون چه شکلیه ولی در تمام ImageView هایی که آیکون در اون ها هست باید این شرط رو بذارید که اگر برند مربوط به اون ImageView لایک شده بود آِیکون لایک رو ست کنه در غیر این صورت unlike. نباید سخت باشه. فکر کنم اگر داخل onCreate هم بذارید مشکلی نداشته باشه. توی onResume هم باید کار کنه. (11 سال پیش)
0 0
منم این تابعو داخل onCreate فراخوانی کردم اما set نمیشه!!! ممنون از پاسختون (11 سال پیش)
+1 0
اون تابعو نباید فراخوانی کنید. اون تابع فقط واسه کلیک کردن جواب میده. شاید اگر کداتونو میذاشتید راحت تر میشد راهنمایی کرد. اما کاری که میتونید بکنید اینه که مقدار سورس ImageView رو از xml ست نکنید. بلکه توی کد برنامه واسه تک تک ImageView ها شرط بذارید و مقدارش رو با همون imgLikeDetail.setImageResource(R.drawable.icon_like); ست کنید. آیتم هاتون داخل لیست ویو هستن یا داخل خود اکتیویتی؟ (11 سال پیش)
پاسخ به سوال 
SaeiD-as  11 سال پیش
0 0

کد کاملم اینه: 

 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();
                }
            }
        });
}
0 0
داخل این کد نوشتم اگه کاربر وارد حساب کاربریش نشده بود اخطار بده اما اگه وارد شده بود تابع checkLike رو بخونه که بالا نوشتم (11 سال پیش)
0 0
یعنی کل کدا همینه؟ فقط یه دونه 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); } (11 سال پیش)
+1 0
ببخشید اینجا به هم ریخت الان میذارم پایین (11 سال پیش)
0 0
مطمینا که کدهام بیشتره اما این قسمتش مربوط به سوالمه، کدتون ناخواناست بی زحمت داخل پاسخ بنویسید و از تگ استفاده کنید که خوانا بشه، مرسی (11 سال پیش)
پاسخ به سوال 
r22222  11 سال پیش
+3 0

 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); }
+1 0
آقا دمت گرم، درست شد، حالا مشکل کدم رو متوجه شدم، من زمانی که کلیک میکردم روی آیکن میگفتم تغییرش بده، و اول کد اونو نمیخوندم (11 سال پیش)
+1 0
خوشحالم مشکلت حل شد. تو این شبا ما رم دعا کن. (11 سال پیش)
0 0
محتاجیم به دعا، آقا یه سوال دیگه: من لایک رو انجام میدم، دقتی به صفحه قبل برمیگردم یه لیست ویو دارم که تعداد لایک رو برام مینویسه، اما این تعداد لایک رو آپدیت نکرده و زمانی که از برنامه میام بیرون و مجدد داخل میشم آپدیت میشه، چطوری اینو درستش کنم (11 سال پیش)
+2 0
باید وقتی لایک انجام میشه و تعدادش رو از هر طریقی به دست میارید مقدار جدیدش رو بریزید داخل ArrayList ای که داخل لیست ویو نمایشش میدید و داخل متد onResume اکتیویتی هم این کد رو بذارید: if (adapter != null) adapter.notifyDataSetChanged(); (11 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .