سؤال

أنا تماما الحيرة على هذا واحد.لدي ثلاثة قوائم مختلفة التي تحتاج إلى عرضها على الشاشة.أنه من الممكن تماما أن القوائم سوف تمتد الماضي الحافة السفلية من الشاشة ، إذا كنت تحتاج إلى التمرير.

لقد حاولت استخدام ScrollView مع LinearLayout الطفل و وضع بلدي ListViews في LinearView, ولكن كل من ListViews قفل على ارتفاع ثابت مع أشرطة التمرير.باستخدام أنواع أخرى من تخطيطات يعني لا التمرير.

هل من أحد لديه أي اقتراحات أو سوف تحتاج إلى برمجيا إضافة عناصر القائمة إلى بعض تخطيط و الأمل الأفضل ؟

هل كانت مفيدة؟

المحلول

وأنا لم تفعل هذا بعد، ولكن لقد تم التفكير فيه منذ أن كنت سوف تحتاج على الأرجح للقيام بذلك. أستطيع أن أفكر في ثلاثة خيارات: استخدام قائمة واحدة فقط مع محتويات كافة القوائم. يمكنك جعل ListAdapter أن يفعل ذلك ويدرج نوعا من الرأس. وهذا يمكن أن يكون شيئا ربما إعادة استخدامها للغاية.

والفكرة الأخرى هي لتقديم قائمة من القوائم. ولكن هذا يبدو وكأنه يسأل عن المتاعب.

نصائح أخرى

إلى الأمام المس الحدث من touched عرض وجهات النظر الأخرى.جميع وجهات النظر الخاصة بك سوف تكون متزامنة توسيع/انهيار جدا.

   OnTouchListener mOnTouch = new OnTouchListener()
    {
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {            
            MotionEvent newEvent = MotionEvent.obtain(event);
            switch(event.getAction()){  
            case MotionEvent.ACTION_MOVE:
                if(mTouched == null){
                    mTouched = v;
                }
                mMovingFlag = true;
                break;
            case MotionEvent.ACTION_UP:
                if(mMovingFlag==false){
                    newEvent.setAction(MotionEvent.ACTION_CANCEL);
                }
                mMovingFlag = false;
                break;
            default:
                mMovingFlag = false;
                if(mTouched != null && mTouched.equals(v)){
                    mTouched = null;
                }
                break;

            }
            if(mTouched == null || mTouched.equals(v)){
                int items = mLayoutWithListViews.getChildCount();
                for(int list=0; list<items; list++){
                    AbsListView listView =mLayoutWithListViews.getChildAt(list));
                    if(listView != v){
                         listView.onTouchEvent(newEvent);
                    }
                }
            }
            return false;
        }
    };

وكان لي مشكلة مماثلة باستثناء أنه كان لي اثنين GridViews وListView واحدة للتمرير. I حلها عن طريق تعيين ذروة ListViews وGridView يدويا:

    ListAdapter listAdapter = listView.getAdapter();

    int rows = listAdapter.getCount() / columns;
    int height = 60 * rows; // Insert the general cell height plus the dividers.

    ViewGroup.LayoutParams params = listView.getLayoutParams();
    params.height = height;
    listView.setLayoutParams(params);
    listView.requestLayout();

والأمل أتمكن من مساعدة شخص ما.

وعلى الرغم من أن هذا الجواب هو لتمرير طريقة العرض بدلا من عرض القائمة، والمشكلة هي نفسها وهذا الحل يعمل بشكل جيد بالنسبة لي. سوف التمرير scrollview غادر تمرير scrollview اليمين وبالعكس.

 public class MainActivity extends Activity implements OnTouchListener {
    private ScrollView scrollViewLeft;
    private ScrollView scrollViewRight;
    private static String LOG_TAG = MainActivity.class.getName();
    private boolean requestedFocus = false;

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

        scrollViewLeft = (ScrollView) findViewById(R.id.scrollview_left);
        scrollViewRight = (ScrollView) findViewById(R.id.scrollview_right);

        scrollViewLeft.setOnTouchListener(this);
        scrollViewRight.setOnTouchListener(this);

        scrollViewLeft.setFocusableInTouchMode(true);
        scrollViewRight.setFocusableInTouchMode(true);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    @Override
    public boolean onTouch(View view, MotionEvent motionEvent) {
        Log.d(LOG_TAG, "--> View, event: " + view.getId() + ", " + motionEvent.getAction() + ", " + view.isFocused());
        Log.d(LOG_TAG, "--> " + scrollViewLeft.isFocused() + ", " + scrollViewRight.isFocused());

        if (motionEvent.getAction() == MotionEvent.ACTION_DOWN && requestedFocus == false){
            view.requestFocus();
            requestedFocus = true;
        }else if (motionEvent.getAction() == MotionEvent.ACTION_UP){
            requestedFocus = false;
        }

        if (view.getId() == R.id.scrollview_left && view.isFocused()){
            scrollViewRight.dispatchTouchEvent(motionEvent);
        }else if (view.getId() == R.id.scrollview_right && view.isFocused()){
            scrollViewLeft.dispatchTouchEvent(motionEvent);
        }

        return super.onTouchEvent(motionEvent);
    }
}
ListAdapter listAdapter = listView.getAdapter();
int rows = listAdapter.getCount() / columns;
 int height = 60 * rows; // Insert the general cell height plus the dividers.
 ViewGroup.LayoutParams params = listView.getLayoutParams();
 params.height = height;
 listView.setLayoutParams(params);
 listView.requestLayout();

استخدم ListView توسيع. فقيه جوابي عن سؤال مماثل هنا: الروبوت ScrollView مشكلة تخطيط

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top