PDA

View Full Version : قرار دادن ListView در ScrollView



ramin149
پنج شنبه 11 دی 1393, 18:36 عصر
سلام بچه ها
چه شکلی می تونم یک ListView قرار بدم در ScrollView که روی ListView اسکرول نباشه و اسکرول روی ScrollView باشه ؟؟؟ ()

storm_saeed
پنج شنبه 11 دی 1393, 20:00 عصر
این کار غلطه و مخالف هدف نهایی ListView هست هم هزینه بره هم اینکه ListView برای خودش کلاس scrolling مربوط به خودش رو implement کرده و در صورت انجام این کار gesture ای دریافت نمیشه زیرا توسط ScrollView دارن هندل میشن
برای این کار بهتره مثلا یه linearLayout داشته باشید و به تعدادview ای که قراره به listview اضافه کنید به این linearlayout اضافه کنید

ramin149
پنج شنبه 11 دی 1393, 21:23 عصر
یه لینک مثال در سایت قرار می دید .

storm_saeed
پنج شنبه 11 دی 1393, 22:44 عصر
mInnerView = (LinearLayout) mView.findViewById(R.id.linearlayout);
ViewGroup parentGroup = (ViewGroup) mInnerView;
for (int i = 0; i < 10; i++) {
View view = inflater.inflate(R.layout.item, null, true);
parentGroup.addView(view);
}

linearlayout یه لیوتی در view اصلی صفحه هست (داخل scrollView) حالا اونو میگیریمش و بهش یه سری view اضافه میکنیم

smemamian
جمعه 12 دی 1393, 17:30 عصر
------
ارسال مجدد پست.

smemamian
جمعه 12 دی 1393, 17:31 عصر
این کار غلطه و مخالف هدف نهایی ListView هست هم هزینه بره هم اینکه ListView برای خودش کلاس scrolling مربوط به خودش رو implement کرده و در صورت انجام این کار gesture ای دریافت نمیشه زیرا توسط ScrollView دارن هندل میشن
برای این کار بهتره مثلا یه linearLayout داشته باشید و به تعدادview ای که قراره به listview اضافه کنید به این linearlayout اضافه کنید

سلام

نه غلط نیست.

در نظر بگیرید ارتفاع یک گوشی 300px می باشد. شما یک ListView به ارتفاع 200px می خواهید داشته باشید و با وجود بقیه Viewها (Other Views) عرض تمامی Viewها می شود 500px .
تصویر زیر این مثال بالا رو بیان می کند :

127168

ما انتظار داریم که Other Views به صورت Scroll نمایش داده شوند. پس تا اینجا ثابت میشه که استفاده از ListView داخل یک SrcollView با چنین اهدافی مشکلی نخواهد داشت.

در اندوید استفاده همزمان از دو Scroll به صورت همزمان ممکن نیست و فقط بحث ListView و SrcollView نیست. حتی شما نمی توانید یک WebView با ارتفاع تعریف شده رو داخل یک SrollView
نعریف کنید. چون Focus در Scroll باید روی یک View باشد.

راه حل :

سفارشی کردن SrollView :


import android.content.Context;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.widget.ScrollView;

public class JustVerticalScrollview extends ScrollView{

public JustVerticalScrollview (Context context) {
super(context);
}

public JustVerticalScrollview (Context context, AttributeSet attrs) {
super(context, attrs);
}

public JustVerticalScrollview (Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}

@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
final int action = ev.getAction();
switch (action)
{
case MotionEvent.ACTION_DOWN:

super.onTouchEvent(ev);
break;

case MotionEvent.ACTION_MOVE:
return false;

case MotionEvent.ACTION_CANCEL:

super.onTouchEvent(ev);
break;

case MotionEvent.ACTION_UP:

return false;

default: Log.i("JustVerticalScrollview ", "onInterceptTouchEvent: " + action ); break;
}

return false;
}

@Override
public boolean onTouchEvent(MotionEvent ev) {
super.onTouchEvent(ev);
return true;
}
}


حالا در قسمت Layout این کلاس رو معرفی کن و سپس ListView رو داخلش استفاده کن.


استفاده از PX برای درک بهتر بود.

موفق و پایدار

storm_saeed
جمعه 12 دی 1393, 18:07 عصر
لطفا منابع و داکیومنت های خود گوگل رو بخونید و بعد به سایت stackoverflow برای دلایل محکم تر مراجعه کنید "ذکر شده که این کار غلطه"

smemamian
جمعه 12 دی 1393, 18:11 عصر
لطفا منابع و داکیومنت های خود گوگل رو بخونید و بعد به سایت stackoverflow برای دلایل محکم تر مراجعه کنید "ذکر شده که این کار غلطه"

اگه توجه کرده باشید، من هم گفتم :
پس تا اینجا ثابت میشه که استفاده از ListView داخل یک SrcollView با چنین اهدافی مشکلی نخواهد داشت.

فونت هم بزرگ نمی کردید قابل خوندن بود.

storm_saeed
جمعه 12 دی 1393, 18:16 عصر
اگه توجه کرده باشید، من هم گفتم :
پس تا اینجا ثابت میشه که استفاده از ListView داخل یک SrcollView با چنین اهدافی مشکلی نخواهد داشت.

فونت هم بزرگ نمی کردید قابل خوندن بود.

کلا استفاده از listview یا هر view وابسته به event های حرکتی در داخل scrollview به هر نحو غلطه !(که شما گفتید غلط نیست) هر کد رو به هر شکلی میشه زد ولی باید همیشه بهترین حالت ممکن رو پیاده سازی کرد

smemamian
جمعه 12 دی 1393, 18:17 عصر
کلا استفاده از listview در داخل scrollview به هر نحو غلطه !(که شما گفتید غلط نیست) هر کد رو به هر شکلی میشه زد ولی باید همیشه بهترین حالت ممکن رو پیاده سازی کرد

اون مثال من رو به روشی که مایل هستید، پیاده سازی کنید.

storm_saeed
جمعه 12 دی 1393, 18:21 عصر
اون مثال من رو به روشی که مایل هستید، پیاده سازی کنید.
اون مثال از پایه اشتباهه بالاترش هم گفتم چطور باید پیاده سازی بشه

m11111
شنبه 13 دی 1393, 16:32 عصر
سلام
ممنون
منم لازم دارم که برنامه به همچین روشی کار کنه
این کلاسی که تعریف کریدم رو میزارم و یه داخل کلاس اکتیویتی برنامم یه نمونه ازش درست میکنم مثل کد زیر

JustVerticalScrollview sw1;
sw1 = (JustVerticalScrollview) findViewById(R.id.sw1);
اما وقتی برنامه رو اجرا میکنم اررور میده!!
مشکل کجاست؟کجا اشتباه کردم؟

smemamian
شنبه 13 دی 1393, 17:07 عصر
سلام
ممنون
منم لازم دارم که برنامه به همچین روشی کار کنه
این کلاسی که تعریف کریدم رو میزارم و یه داخل کلاس اکتیویتی برنامم یه نمونه ازش درست میکنم مثل کد زیر

JustVerticalScrollview sw1;
sw1 = (JustVerticalScrollview) findViewById(R.id.sw1);
اما وقتی برنامه رو اجرا میکنم اررور میده!!
مشکل کجاست؟کجا اشتباه کردم؟

سلام
در xml به درستی تعریف کردین ؟ متن خطا رو بذارین.

ramin149
سه شنبه 23 دی 1393, 19:32 عصر
با سلام . من روش ایجاد فرم شما را انجام دادم و برای نمایش اطلاعات کاملا کارآمد بود . اما یک مشکلی دارم و آن اینکه اطلاعات ویو add شده به linearlayout را نمی تونم بگیرم وقتی که روی دکمه submit کلیک می کنم .
نمونه کد ام را آپلود می کنم . (مشکل در سورس اونجاست که سن هر بچه را نمی تونم بگیرم .)
http://ramin149.persiangig.com/android/NestedForm.zip/download
لطفا کمک کنید من خیلی وقته روی ایجاد چنین فورمی مشکل دارم و مثل این فرم که من ایجاد گردم در اینترنت نیست و اگر کامل بشه نمونه کد خوبی برای بقیه بچه ها می شه .

harani
سه شنبه 23 دی 1393, 22:39 عصر
دوست گرامی از ابین متد استفاده کن خلاص کن خودتو .


public void updateListViewHeight(ListView myListView) {
ListAdapter myListAdapter = myListView.getAdapter();
if (myListAdapter == null) {
return;
}
// get listview height
int totalHeight = 0;
int adapterCount = myListAdapter.getCount();
for (int size = 0; size < adapterCount; size++) {
View listItem = myListAdapter.getView(size, null, myListView);
listItem.measure(0, 0);
totalHeight += listItem.getMeasuredHeight() ;
}
// Change Height of ListView
ViewGroup.LayoutParams params = myListView.getLayoutParams();


params.height = totalHeight
+ (myListView.getDividerHeight() * (adapterCount - 1)) + 60 ;
myListView.setLayoutParams(params);
}

ramin149
چهارشنبه 24 دی 1393, 00:16 صبح
دوست عزیز مشکل اینجاست که دو تا ListView تو در تویه و مشکل گرفتن پارامترهای ListView دومه . اگر کدی که گذاشتن را ببینید متوجه میشید منظورم چیه (وقتی روی دکمه submit کلیک کنید )