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

پروژه لیست یو استاد رو چطور میشه سورت کرد ؟

alfredo  10 سال پیش  10 سال پیش
+1 0

سلام دوستان

در پروژه کاستوم لیست ویو استاد، چطور میشه وقتی اطلاعات داخل یکی از آیتم های لیست ویو رو ادیت کردیم، اون آیتم بیاد اول لیست قرار بگیره !؟

مثل برنامه مسیج گوشی که همیشه آخرین مسیج ها اول لیست هستند...

با تشکر.

+1 0
لینک (10 سال پیش)
0 0
ممنون ولی هیچی از این لینک دستگیرم نشد. (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
احمد  10 سال پیش
+3 0

از این کد استفاده کنید

     public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView lstContent = (ListView) findViewById(R.id.lstContent);

        adapter = new AdapterNote(G.notes);
        lstContent.setAdapter(adapter);

		// for (int i = 0; i < 10; i++) {
            StructTask note = new StructTask();
		note.title = "salam";
		note.description = "Description 1";
            note.done = false;

            G.notes.add(note);

		StructTask note2 = new StructTask();
		note2.title = "baran";
		note2.description = "Description 2";
		note2.done = false;

		G.notes.add(note2);
		StructTask note3 = new StructTask();
		note3.title = "aseman";
		note3.description = "Description 3";
		note3.done = false;

		G.notes.add(note3);

		// }
		adapter.sort(new Comparator<StructTask>() {

			@Override
			public int compare(StructTask item1, StructTask item2) {
				return item1.title.compareTo(item2.title);
			}
		});
        adapter.notifyDataSetChanged();
    }

 

 

0 0
خیلی متشکرم از بزرگواری شما. میشه بگید این کد رو دقیقا کجای برنامه باید قرار بدم ؟ و اگه امکان داره یکمی توضیح بدید که بر چه اساسی میاد مرتب میکنه لیست رو. (10 سال پیش)
+1 0
برای سوال اولتون پاسخ را ویرایش کردم (10 سال پیش)
+1 0
title هر دو را با هم مقایسه میکنه و مرتب می کنه مثلا خروجی کد بالا اینه اول aseman بعد baran بعد salam بر اساس ترتیب حروف الفبا (که اینجا انگلیسی) (10 سال پیش)
+1 0
روی فارسی هم مشکلی نداره اول انگلیسی ها را سورت می کنه و بعد فارسی اگه هر دوش باشن (10 سال پیش)
0 0
خیلی ممنون. بعد از اینکه کد شما رو قرار میدم، به این ارور میخورم: Cannot instantiate the type StructTask (10 سال پیش)
0 0
خیلی ممنون. بعد از اینکه کد شما رو قرار میدم، به این ارور میخورم: Cannot instantiate the type StructTask (10 سال پیش)
0 0
خیلی ممنون. بعد از اینکه کد شما رو قرار میدم، به این ارور میخورم: Cannot instantiate the type StructTask (10 سال پیش)
+1 0
کلاس خودتون را به جاش قرار بدین (همون کلاسی که اطلاعات توش هست) (10 سال پیش)
0 0
تمام تغیرات لازم رو انجام دادم اما باز ارور میخوره داخل (StructTask note = new StructTask)استراکت تسک دومی رو ارور میده ...و اگه میشه نحوه کارکرد sort رو هم یکم توضیح بدید (10 سال پیش)
0 0
با عرض سلام مجدد. ارور StractTask برطرف شد اما نحوه ی استفاده از sortکردن رو هنوز خوب درک نکردم، یکم توضیح کوچولو برای این تیکه کد لازمه با عرض تشکر فراوان (10 سال پیش)
0 0
با عرض سلام مجدد. ارور StractTask برطرف شد اما نحوه ی استفاده از sortکردن رو هنوز خوب درک نکردم، یکم توضیح کوچولو برای این تیکه کد لازمه با عرض تشکر فراوان (10 سال پیش)
+1 0
ایتم های لیست را دو به دو با هم مقایسه می کنه و اگه حروف کلمات کوچیکتر از دومی بود جابجا میشن اگه اشتباه نکنم (بر اساس کد اسکی حروف که ببنید می فهمید) (10 سال پیش)
پاسخ به سوال 
MOHAMAD  10 سال پیش
+2 0

سلام

خب طبق توضیحاتی که دادید و متوجه شدم , شما قصد دارید که آیتم شما بعد از ویرایش , صرف نظر از اینکه چه تغییری کرده , به اول لیست یا در واقع همون ابتدای آرایه شما قرار بگیره .


 

خب راهی که به شما میتونم پیشنهاد بدم اینه که بعد از اینکه به اکتیویتی ویرایش رفتید :

1. از طریق پوزشنه آیتمی که از طریق اینتنت ارسال کردید , برای نمایش محتوای آیتم درون ادیت باکس استفاده کنید.

2. در لیسنری که برای کلید "تایید اتمام ویرایش" ست کردید , توسط پوزشن , اون آیتم (آیتم قدیم) رو از لیست پاک کنید.

  3. مجددا یه اشاره گر جدید به کلاس استراکت نت  بسازید.

4. از طریق ادیت باکس و چک باکس مقدار های جدید رو درون  این اشاره گر واریز کنید.

5 . در نهایت این اشاره گر رو به موقعیت " صفر " لیست اضافه کنید.

خب به اینصورتی که در بالا توضیح دادم  اون آیتم با مقادیر جدید به ابتدای لیست با موقعیت "صفر" رفته و تمامیه آیتم ها به مقدار یک واحد به سمت پایین انتقال پیدا خواهند کرد . به این شکل که آیتمی که قبل از انجام این عملیات در موقعیت "صفر" لیست قرار داشته به موقعیت "یک" در لیست انتقال پیدا میکنه و این عمل برای بقیه آیتم های مابعد این آیتم نیز اعمال خواهد شد .


 

کدهای لازم :

 G.notes.remove(position);
---------------------------
G.notes.add(0,item);

مثال :

 public int position = 0;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_edit);

final EditText edtTitle = (EditText) findViewById(R.id.edtTitle);
final EditText edtDescription = (EditText) findViewById(R.id.edtDescription);
final CheckBox chkDone = (CheckBox) findViewById(R.id.chkDone);
Button btnOk = (Button) findViewById(R.id.btnOk);
-------------------------------------------------- دریافت پوزشن آیتم قدیم از طریق اینتنت اکسترا
Bundle extras = getIntent().getExtras();
if (extras != null) {
position = extras.getInt("POSITION");
}
-------------------------------------------------- نمایش مقادیر آیتم قدیم درون ادیت باکس و چک باکس
final StructTask item = G.notes.get(position);
edtTitle.setText(item.title);
edtDescription.setText(item.description);
chkDone.setChecked(item.done);
--------------------------------------------------

--------------------------------------------------- ساخت اشاره گر جدید و مقدار دهی و انتقال به ابتدای لیست
btnOk.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {

StructTask item = new StructTask();
  G.notes.remove(position);
item.title = edtTitle.getText().toString();
item.description = edtDescription.getText().toString();
item.done = chkDone.isChecked();
G.notes.add(0,item);
G.adapter.notifyDataSetChanged();
finish();
}
});
}
0 0
سلام. آقا محمد دم شما گرم، دارم امتحانش میکنم. کدهای داخل دکمه btnok توی اکتیویتی ادیت رو که قرار میدم به G.adapter.notifyDataSetChanged(); ایراد میگیره و میگه توی G ادپتر نداری ! راست هم میگه. من توی G ادپتر نداردم ! چیکار کنم ؟! (10 سال پیش)
0 0
به عبارت پوزیشن داخل G.notes.remove(position); هم ارور میده، میگه فاینال نیست، اگر فاینالش کنم، پوزیشن بالایی (همونجایی که =0 قرارش دادیم) به ارور میخوره میگه نباید فاینال باشه ! (10 سال پیش)
+1 0
سلام . خب پوزشن رو از متغیر لوکال ( چیزی که الان هست ) به فیلد ( تعریف قبل از متد آنکری ایت ) تبدیل کنید درست میشه و دیگه نمیخواد فاینال باشه. لینک در مورد adapter هم متوجه نشدم مگه میشه تعریف نکرده باشید . اصل قضیه هست توی لیست ویو . پس بجاش چه چیزی تعریف کردین . بلاخره باید یه اشاره گر به کلاس adapter داشته باشید که بتونه هر عضو آرایه نوتس رو بگیره و به یه آیتم تبدیل کنه و در نهایت هم لیست ویو این اشاره گر رو به عنوان adapter خودش ست کنه . (10 سال پیش)
+1 0
خب گمان میکنم adapter واسه شما توی اکتیویتی اصلی تعریف شده . خب شما کافیه که در ابتدای اکتیویتی کد تعریف adapter رو به کلاس جی انتقال بدید و از نوع استاتیک تعریفش کنید . بعد باید به اکتیویتی اصلی برگردید و نگاه کنید جایی که نوشته بوده adapter رو به G.adapter تغییر بدید . با تعریف adapter در کلاس G به عنوان استاتیک , این امکان رو دارید که هرجا خواستید ازش استفاده کنید . البته در نظر داشته باشید که میتونستید در همون اکتیویتیه اصلی هم به عنوان متغیر استاتیک تعریفش کنید اما هم زمان صدا زدن کد به نسبت طولانی تری مینوشتید هم اینکه بلاخره ما کلاس جی رو واسه تعریف همین چیزای عمومی ساختیم پس بهتره اینجور چیزارو که میخوایم همه جا بهش دسترسی داشته باشیم و حکم تنظیمات اولیه رو دارن رو در کلاس G بصورت استاتیک تعریف کنیم . (10 سال پیش)
0 0
من توی G ادپتر ندارم ! تعریف هم که میکنم درست نمیشه ! adapter رو به عنوان Object تعریف کنم ؟ جنسش چی باید باشه؟ اصلا تو کل برنامه من یک کلمه به اسم adapter ندارم ! فقط یک کلاس AdapterNote دارم. که اون هم توی G اثری ازش نیست :( یکم اوضاع پیچیده شد. فکر کنم گیج شدم :( (10 سال پیش)
0 0
آقا یدونه public ArrayAdapter ; به اسم adapter توی Activitymain پیدا کردم ! (10 سال پیش)
+1 0
خب کاری که گفتم رو انجام بدید . همینی که هست رو به کلاس جی انتقال بدید فقط بعد از پابلیک یه استاتیک هم اضاف کنید که هر وقت خواستید به این شکل G.adapter بتونید صداش بزنید . طبق توضیحاتی که در پاسخ های بالا دادم عمل کنید . (10 سال پیش)
0 0
انجام دادم، توی برنامه دیگه ارور ندارم ولی وقتی میخوام اجرا کنم هم روی امولاتور هم روی گوشی کرش میکنه. لاک کت هم فقط یک خط مینیویسه با این مضمون: E/AndroidRuntime(2252): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit (10 سال پیش)
+1 0
شما لطف کنید یه خروجی از پروژتون بگیرید , آپلود کنید و لینک رو اینجا بزارید تا یه نگاهی بهش بندازم . ضمنا برای دیدن اررورها نیاز هست که توی قسمت سرچ عبارت "ابتدای نام پکیچ:app" رو بنویسید و دوباره برنامه رو اجرا کنید اونموقع اررورها رو میتونید ببینید . اینکارو کنید اگر ایراد رو پیدا کردید که هیچ اگر نه که پروژه رو واسم اینجا بزارید تا بررسی کنم . (10 سال پیش)

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