문제

나는 이것에 완전히 혼란스러워한다. 화면에 표시 해야하는 세 가지 목록이 있습니다. 목록이 화면의 하단 가장자리를지나 연장 될 가능성이 있으므로 스크롤이 필요합니다.

나는 a를 사용해 보았다 ScrollView a 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와 스크롤 할 목록 뷰가 있다는 비슷한 문제를 저장했습니다. 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를 사용하십시오. 비슷한 질문에 대한 내 대답은 여기를 참조하십시오.안드로이드 스크롤 뷰 레이아웃 문제

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top