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

خارج شدن اشیای بالایی listview با اسکرول آن ؟

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

محیطی رو در نظر بگیرید که دارای سوال و جواب است. از آنجا که جواب ها می توانند متعدد باشند در یک listview ذخیره شده اند ولی سوال در بالای listview است و اطلاعات ثابتی است.

چگونه می توان با اسکرول کردن جوابها, سوال هم به بالا برود؟ یعنی در واقع سوال به عنوان اولین عنصر listview محسوب شود؟

این را هم در نظر داشته باشید که متن سوال می تواند چندین خط باشد, لذا حتما باید اسکرول شود

نظرات

مجتبی یگانه 11 سال پیش
یه راهش اینه اصلا سوال تو لیست ویو نباشه ، یه لایه باشه که روی لیست قرار گرفته ، ارتفاع خاصی داره ، اگه ارتفاع متن هم طولانی باشه با یه ScrollView اسکرول بخوره ! / یه relative layout با یه linear layout که parrent top = true هست ، و یک لیست ویو
ahmad_r 11 سال پیش
من میخوام سوال هم جزیی از اسکرول بشه یعنی با اسکرول کردن هر قسمت از صفحه، اول سوال خارج بشه بعد یکی یکی جواب ها. آیا راهی که فرمودید حل کننده انتظار بنده هست ؟ من که جواب نگرفتم
مجتبی یگانه 11 سال پیش
خوب ! ، چیزی که شما بهش نیاز دارید ، یک هدر برای listView هست ، listView.addHeaderView

پاسخ‌ها 2

کاشی زاده 11 سال پیش

میتونید از کاستوم ویو استفاده کنید 2 ویو مختلف یکی برای سوال یکی برای جواب که میتونید داخل یه اسکرول ویو هر وقت نیاز داشتید به تعداد مورد نیاز بسازید و ازشون اینطوری استفاده کنید .

برای ساخت ویو سوال جواب هم میتونید از حلقه for و شرط if استفاده کنید .

اینطوری هم اسکرول میشه هم مدیریتش دست خودتون هست .البته بهتره تعداد سوال و جوال ها زیاد نباشه چون باعث کاهش سرعت در برنامه میشه 

نظرات

ahmad_r 11 سال پیش
یعنی راه ساده تری نیست؟ اگه نسخه جدید chrome اندروید رو دیده باشید وقتی به سمت پایین اسکرول می کنید آدرس بار به سمت بالا رفته و مخفی میشه و به محض اسکرول به سمت بالا خودشو نشون میده آیا object خاصیه؟
کاشی زاده 11 سال پیش
میتونید از 2 تا فریم لیوت استفاده کنید یکم پیچیده هست باید تو استک سرچ کنید
AhmadVB 11 سال پیش

من حدس می زنم outline شما به این شکل باشد.

به این دلیل که متد onScrolListener مربوط به ListView بر روی همین متد که در ScrolView نیز وجود دارد overide می شود خاصیت scroling از ScrolView دیگر کار نمی کند.

راه حل آن دو راه است :

1- در صورتی که از همین شکل موجود در تصویر outline فوق می خواهید استفاده کنید ، دستورات زیر را در onCreate اکتیویتی بنویسید  :

 ListView lv = (ListView)findViewById(R.id.myListView);  // your listview inside scrollview
lv.setOnTouchListener(new ListView.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
int action = event.getAction();
switch (action) {
case MotionEvent.ACTION_DOWN:
// Disallow ScrollView to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(true);
break;

case MotionEvent.ACTION_UP:
// Allow ScrollView to intercept touch events.
v.getParent().requestDisallowInterceptTouchEvent(false);
break;
}

// Handle ListView touch events.
v.onTouchEvent(event);
return true;
}
});

2- شما می توانید با استفاده از inflater ها کیفیت بهتری از اسکرول را ایجاد کنید. (شبیه همان چیزی که در مورد کروم مثال زدید) : به این شکل که یک layout مجزا برای سوال ایجاد کنید و آن را به عنوان Header به این ListView اضافه کنید (می توانید غیر از این  Header ، یک یا چند footer نیز اضافه کنید)

این دستورات را نیز در onCreate اکتیویتی بنویسید.

View header = getLayoutInflater().inflate(R.layout.header, null);
View footer = getLayoutInflater().inflate(R.layout.footer, null);
listView.addHeaderView(header);
listView.addFooterView(footer);

نظرات

احمد اسدی 11 سال پیش
احمد جان، میشه این layout ها که طریق addHeaderView به لیست ویو اضافه کردی رو به قسمت های دیگه هم اضافه کرد ؟ و همچنین میشه چندین header به لیست ویو اضافه کرد ؟ و در آخر میشه مثلآ بین هر 5 آیتم، یک layout اضافه کرد ؟ لیست ویو چنین قابلیت هایی رو داره ؟
AhmadVB 11 سال پیش
بله ، شما می توانید هر چندتا که خواستی اضافه کنی.جواب بقیه سوالاتت هم بله است. هر جا که inflater هست می تونی هر layout ای را که دوست داشته باشی در اون لحظه اضافه کنی.مهم هم نیست یکی در میان باشه یا هر پنج تا یکی
ahmad_r 11 سال پیش
ممنون با روش دوم تست کردم دقیقا همونه که دنبالش بودم

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