بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]
پرسش و پاسخ

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

مدیریت گفتگو
alfredo 10 سال پیش
آخرین تغییر: 10 سال پیش

سلام دوستان

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

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

با تشکر.

نظرات

alfredo 10 سال پیش
ممنون ولی هیچی از این لینک دستگیرم نشد.

پاسخ‌ها 2

احمد 10 سال پیش

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

     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();
    }

 

 

نظرات

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

سلام

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


 

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

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();
}
});
}

نظرات

alfredo 10 سال پیش
سلام. آقا محمد دم شما گرم، دارم امتحانش میکنم. کدهای داخل دکمه btnok توی اکتیویتی ادیت رو که قرار میدم به G.adapter.notifyDataSetChanged(); ایراد میگیره و میگه توی G ادپتر نداری ! راست هم میگه. من توی G ادپتر نداردم ! چیکار کنم ؟!
alfredo 10 سال پیش
به عبارت پوزیشن داخل G.notes.remove(position); هم ارور میده، میگه فاینال نیست، اگر فاینالش کنم، پوزیشن بالایی (همونجایی که =0 قرارش دادیم) به ارور میخوره میگه نباید فاینال باشه !
MOHAMAD 10 سال پیش
سلام . خب پوزشن رو از متغیر لوکال ( چیزی که الان هست ) به فیلد ( تعریف قبل از متد آنکری ایت ) تبدیل کنید درست میشه و دیگه نمیخواد فاینال باشه. لینک در مورد adapter هم متوجه نشدم مگه میشه تعریف نکرده باشید . اصل قضیه هست توی لیست ویو . پس بجاش چه چیزی تعریف کردین . بلاخره باید یه اشاره گر به کلاس adapter داشته باشید که بتونه هر عضو آرایه نوتس رو بگیره و به یه آیتم تبدیل کنه و در نهایت هم لیست ویو این اشاره گر رو به عنوان adapter خودش ست کنه .
MOHAMAD 10 سال پیش
خب گمان میکنم adapter واسه شما توی اکتیویتی اصلی تعریف شده . خب شما کافیه که در ابتدای اکتیویتی کد تعریف adapter رو به کلاس جی انتقال بدید و از نوع استاتیک تعریفش کنید . بعد باید به اکتیویتی اصلی برگردید و نگاه کنید جایی که نوشته بوده adapter رو به G.adapter تغییر بدید . با تعریف adapter در کلاس G به عنوان استاتیک , این امکان رو دارید که هرجا خواستید ازش استفاده کنید . البته در نظر داشته باشید که میتونستید در همون اکتیویتیه اصلی هم به عنوان متغیر استاتیک تعریفش کنید اما هم زمان صدا زدن کد به نسبت طولانی تری مینوشتید هم اینکه بلاخره ما کلاس جی رو واسه تعریف همین چیزای عمومی ساختیم پس بهتره اینجور چیزارو که میخوایم همه جا بهش دسترسی داشته باشیم و حکم تنظیمات اولیه رو دارن رو در کلاس G بصورت استاتیک تعریف کنیم .
alfredo 10 سال پیش
من توی G ادپتر ندارم ! تعریف هم که میکنم درست نمیشه ! adapter رو به عنوان Object تعریف کنم ؟ جنسش چی باید باشه؟ اصلا تو کل برنامه من یک کلمه به اسم adapter ندارم ! فقط یک کلاس AdapterNote دارم. که اون هم توی G اثری ازش نیست :( یکم اوضاع پیچیده شد. فکر کنم گیج شدم :(
alfredo 10 سال پیش
آقا یدونه public ArrayAdapter ; به اسم adapter توی Activitymain پیدا کردم !
MOHAMAD 10 سال پیش
خب کاری که گفتم رو انجام بدید . همینی که هست رو به کلاس جی انتقال بدید فقط بعد از پابلیک یه استاتیک هم اضاف کنید که هر وقت خواستید به این شکل G.adapter بتونید صداش بزنید . طبق توضیحاتی که در پاسخ های بالا دادم عمل کنید .
alfredo 10 سال پیش
انجام دادم، توی برنامه دیگه ارور ندارم ولی وقتی میخوام اجرا کنم هم روی امولاتور هم روی گوشی کرش میکنه. لاک کت هم فقط یک خط مینیویسه با این مضمون: E/AndroidRuntime(2252): >>>>>> AndroidRuntime START com.android.internal.os.RuntimeInit
MOHAMAD 10 سال پیش
شما لطف کنید یه خروجی از پروژتون بگیرید , آپلود کنید و لینک رو اینجا بزارید تا یه نگاهی بهش بندازم . ضمنا برای دیدن اررورها نیاز هست که توی قسمت سرچ عبارت "ابتدای نام پکیچ:app" رو بنویسید و دوباره برنامه رو اجرا کنید اونموقع اررورها رو میتونید ببینید . اینکارو کنید اگر ایراد رو پیدا کردید که هیچ اگر نه که پروژه رو واسم اینجا بزارید تا بررسی کنم .

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