a.khosroabadi

توسعه دهنده حرفه ای اندروید
  • تعداد ارسال ها

    84
  • تاریخ عضویت

  • آخرین بازدید

  • Days Won

    13

تمامی ارسال های a.khosroabadi

  1. سلام تو متد onCreateView تو فرگمنت هاتون قبل از کد زیر AdapterCardView adapterCardView=new AdapterCardView(getContext(),arrayList); اینو بزارین ببینین چی میشه arrayList.clear();
  2. ببینید وقتی شما دارین برنامه برای اندروید مینویسین چون ورژن اندروید هر بار میره بالاتر گوگل امکانات جدیدو تو لایبراری های جداگونه قرار میده و شما برای استفاده از این امکانات باید این لایبراری هارو به پروژه خودتون اضافه کنید. الان این خط کدی که داره ایراد میگیره مربوط به theme های متریال هستش که تو لایبراری های جانبی هستش.برای اینکه شم بتونید از این امکانات استفاده کنید باید این لایبراری هارو به پروژتون اضافه کنید. الان خطایی که دارین میگیرین دلیلش این هستش که این لایبراری ها به پروژه شما اضافه نشده.
  3. سلام دوست عزیز @style/Theme.AppCompat.Light.DarkActionBar این استایلو پیدا نمیکنه که مربوط به لایبراری AppCompat هستش و برای اضافه کردنش باید کد زیر به gradle اضافه کنید dependencies { compile 'com.android.support:appcompat-v7:+' } و به جای + انتها ورژنش بزارین که بستگی به sdk های شما داره.
  4. سلام شما احتیاجی نیست دانلود کنید. اگه وی پی ان دارین نصب کنید و وقتی سینک کنید gradle دانلود میکنه براتون.
  5. سلام دوست عزیز ببخشید با تاخیر جواب میدم اگه ممکنه کد اکتیویتی که این fragment ها (تب ها) رو توش لود میکنید و همینطور کد AdapterCardView بزارین.
  6. سلام دوست عزیز آموزش های udemy خوب هستند. برای برنامه نویسی اندروید باید زبان جاوا رو هم بلد باشین تا حدودی که تو این ویدئو مقدماتش رو آموزش میده. میتونید از کتاب ها هم استفاده کنید. در صورتی که زبانتون خیلی قوی نیست به نظر با فارسی شروع کنید. البته میتونید از ویدئو های udacity هم استفاده کنید که اگه انلاین ببینید زیرنویس هم داره (البته انگلیسی) و میتونید هم دانلود کنید ویدئو ها به همراه زیرنویسشونو به نظرم برای یاد گیری اصولی اندروید باید جاوا رو در حد مقدماتی به عنوان پیش نیاز یاد بگیرین
  7. سلام دوست عزیز احتیاجی به متغییر نیست.دلیل این اتفاق این هستش که زمانی که شما بین تب ها جا به جا میشین فرگمنت ها به صورت کامل از بین نمیرن. برای این که شما جلو این تکرار رو بگیرین باید تو متد onCreateView یه شرط بزارین قبل از ساخت adapter تا چک کنید ببینید ازین فرگمنت دیتایی ساخته شده یا نه به این صورت تغییر بدین کدتونو if (savedInstanceState == null){ adapterCardView = new AdapterCardView(getActivity(),arrayList); loadDatabase(); }
  8. خداروشکر.خواهش میکنم کاری نکردم که.
  9. شما این کارو باید انجام بدین fina Recycler_View_Adapter mAdapter = new Recycler_View_Adapter(data1); rc.setAdapter(mAdaper); و تو متد onClick هم به این صورت عمل کنید mAdapter.add(data);
  10. مشکل پیدا شد شما داری در ابتدا یه adabter میسازی و به recycler View ست میکنی تو این خط rc.setAdapter(new Recycler_View_Adapter(data1)); و تو متد onClick دوباره دارین یک adabter دیگه میسازین و متد add رو صدا میزنید؟ خوب مشخصه این یه ابجکت جدید هستش و شما به اون اضافه میکنید. شما باید متد add همون adaptere اولیو صدا بزنید.
  11. سلام فکر نمیکنم مشکلی باشه چون من خودم این کارو انجام میدم حتی لیستمو کلا با این روش پر میکنم. میشه قطعه کد اداپتر و اکتیویتی بزاری
  12. ببینید متد notifyAll که تو کلاس های جاوا هستش برای این نیست که شما به main thread بگید که ui رو اپدیت کنه چون تعریف و کارایش متفاوت هست بعضی زمانها شما همه thread هایی که دارین تو حالت wait نگه میدارین تا یه کاری توسط یه thread انجام بشه.حالا برای اینکه این theard های wait شده به اصطلاح بیدار کنید از متد notifyAll استفاده میکنید.ولی اینجا ما هیچ thread نداریم که wait باشه. شما باید به خود adapter اطلاع بدین که یک ایتم به لیستتون اضافه شده که اینکارو میتونید به وسیله متد notifyItemInserted() انجام بدین این متد یه ورودی میگیره که میشه ایندکس ایتم جدید شما تو لیست. و این قسمت هم productBeanList.size() - 1 مکان ایتم جدید رو تو ادپتر مشخص میکنه یعنی میگم به انتهای لیست اضافه کنه.اگه مثلا 0 بزارین ایتم های جدید اول میاره. حالا شما باید یه متد add مثل این تو کلاس adapter که ساختین بزارین ورودیش میشه object شما و اونو به لیست اضافه میکنه و به متد بالا هم به adapter اطلاع میدید که یک ایتم جدید اضافه شده و باید خودشو اپدیت کنه. حالا شما به جای اینکه یک ایتم به لیستتون اضافه کنید میاید این متد از adapter صدا میزنید و ابجکت رو بهش پاس میدین.
  13. مشکل تو این متد notifyAll هستش. چیزی که من از قطعه کد های شما متوجه شدم اینه که دارین تو اکتیویتی یه ایتم به لیستتون اضافه میکنید درسته؟ برای اینکار میتونستین دوتا کار انجام بدین اول اینکه یه متد برای اضافه کردن ایتم تو اداپترتون میزاشتین و به لیستتون اضافه میکردین به این صورت public void add(ProductBean.Product productBean){ productBeanList.add(productBean); notifyItemInserted(productBeanList.size() - 1); } و دیگه اینجوری تو اکتیویتی به لیست اضافه نمیکردین احتیاجی هم به متد notifyAll نیستش.
  14. سلام دوست عزیز تو کلاس MainPage احتمالا یک متد onClick دارین ؟ میشه این قسمتو هم بزارین
  15. سلام دوست عزیز برای این کار باید از query های sql استفاده کنید برای مثال SELECT * FROM Your_Table WHERE Table_Culomn LIKE '%علی%'
  16. خواهش میکنم دوست عزیز
  17. سلام اگه ممکنه کدی که برای ساخت دیتابیس نوشتین بزارین تا رو کدتون توضیح بدیم. اگه از کلاس SqLiteOpenHelper یه کلاس ساخته باشین باید برای دیتابیستون یه ورژن گذاشته باشین.حالا اگه این ورژن تغییر بدین (مثلا 1 بوده الان بزارین 2) و اینو تو متد onUpgrade مشخص کنید. دیتابیستون اپدیت میشه.این یک نمونه از این کلاس هستش. public class MyDataBase extends SQLiteOpenHelper { public AquaPlantDataBase(Context context) { super(context, DBConstantManager.DATABASE_NAME.MY_DATABASE_NAME , null, DBConstantManager.DATABASE_VERSION.DB_VERSION); } @Override public void onCreate(SQLiteDatabase sqLiteDatabase) { sqLiteDatabase.execSQL(DBConstantManager.TABLE_SCRIPT.T_FAVORITS); sqLiteDatabase.execSQL(DBConstantManager.TABLE_SCRIPT.T_FILTERCACHE); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int oldVersion, int newVersion) { } } اگه دقت کنید تو constructor یه ورژن دادم (آخرین پارامتر ورودی) وقتی دیتابیس شما ساخته میشه برای اولین بار این ورژن ثبت میشه و بعد از هر اپدیت برنامه این ورژن چک میشه در صورتی که ورژن جدید با قبلی یکی باشه تغییری انجام نمیشه ولی اگه این ورژن از قبلی یکی بیشتر باشه متد onupgrade صدا زده میشه و دیتابیستون اپدیت میشه.
  18. سلام دوست عزیز شما زمانی که دارین اداپتر رو میسازین یک LayoutManager بهش پاس میدین اگه از LinearLayoutManager استفاده کنید میتونید با استفاده از 2 متد زیر position آخرین ایتم رو بگیرین. linearLayoutManager.findLastCompletelyVisibleItemPosition() linearLayoutManager.findLastVisibleItemPosition()
  19. سلام دوست عزیز میشه کدی که برای تغییر فونت و ست کردن typeFace گذاشتین بدین؟همینطور خطا رو هم اگه بزارین خیلی بیشتر میشه کمک کرد. و غیر از adapter میتونید یه custom textview بسازین که فونت خودتون داشته باشه. پ . ن : اداپتر هم نمیخواد خودتون بسازین، راه برای رسیدن به خدا زیاد هستش.
  20. سلام دوست عزیز یه جدول تو دیتابیس بساز که یه ستون ایدی داشته باشه و یه ستون ایدی اون ایتم. حالا هر زمانی که یک ایتم رو لایک میکنه یه رکورد تو این جدول بخوره و اگه انلایک کرد بگرده و او اون ایتم رو پاک کنه.برای نشون دادن هم تو اداپتر ریسایکلر ویو تو متد onBind هم هر ایتم که میگیری یک بار تو این جدول سرچ بزن اگه وجود داشت که یعنی لایک شده و اگه نبود یعنی لایک نشده و بر اساس این ایتم های ریسایکلرت رو بچین.
  21. سلام روز بخیر اول اینکه احتیاجی نیست POST باشه requesteton بزارینش GET و اینکه نوع خروجی چرا void هستش؟ باید بشه ابجکتی که قرار هستش بگیرین از وب سرویس این یک نمونه از کد retrofit 2 هستش @GET("rest/productImageService/getproductimage/{imageName}") Call<ProductImageBean> getProductImages(@Path("imageName") String imagePath);
  22. پروژه تونو یک بار clean و بعد build کنید
  23. به نظر من یه linearLayout بزار horizontal بعد داخلش دوتا linearLayout بزار که برای هردو width=0dp باشه و weight=0.5 اینجوری صفحه به دو قسمت تقسیم کردی حالا داخل هرکدوم ازین لایوت ها میتونی عکس و متنتو بزاری
  24. بستگی به چینش فصحه شما داره که چجوری بخواین بچینید