Два ListViews и ScrollView - PullRequest
       4

Два ListViews и ScrollView

5 голосов
/ 26 июня 2011

Я здесь так близко, и я много чего пробовал, но не могу заставить его работать. У меня есть два списка здесь. То, что я хочу, чтобы каждый просмотр списка показывал его ВЕСЬ контент. Я не хочу прокручивать списки. Я хочу, чтобы Scrollview содержал прокручиваемые списки. Самое близкое, что я смог получить (что неправильно), так это то, что каждый просмотр списка можно прокручивать. Это означает, что каждый просмотр списка показывает только 1 1/2 ячейки. Я бы подумал, что это будет очень простой задачей, но в Android есть некоторые причудливые вещи.

Итак, снова, каждый вид списка показывает весь контент, даже если эта высота контента проходит мимо экрана. Затем все, что мне нужно сделать, это прокрутить вниз, чтобы увидеть второе представление списка, которое показывает все его содержимое.

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:orientation="vertical"
android:fillViewport="true">
<LinearLayout
android:layout_height="fill_parent"
android:layout_width="wrap_content"
android:orientation="vertical"
android:fillViewport="true">
<LinearLayout 
android:layout_weight="10"
android:orientation="vertical"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#CCCCCC"
android:text="@string/alerts_top_title"
android:gravity="center"
android:textColor="#000000"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true">
</TextView>
<ListView 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/cameraListAlerts" >
</ListView>
</LinearLayout>
<LinearLayout 
android:layout_weight="10"
android:orientation="vertical"
android:layout_height="wrap_content"
android:layout_width="fill_parent">
<TextView
android:gravity="center"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:background="#CCCCCC"
android:textColor="#000000"
android:text="@string/alerts_bottom_title">
</TextView>
<LinearLayout 
android:layout_width="fill_parent"
android:layout_height="8dp">
</LinearLayout>
<Button
android:id="@+id/addRecipient"
android:layout_height="50dp"
android:layout_width="fill_parent"
android:layout_centerHorizontal="true"
android:text="@string/addRecipient"/>

<ListView 
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/recipientListAlerts" >
</ListView>
</LinearLayout>
</LinearLayout>
</ScrollView>

Ответы [ 3 ]

9 голосов
/ 26 июня 2011

Вы собираетесь потратить гораздо больше времени и энергии, пытаясь заставить это работать, если это когда-нибудь произойдет. ListView существует для обработки длинных списков, которые требуют слишком много ресурсов для одновременного рисования. Они перерабатывают строки просмотра, когда вы прокручиваете их, чтобы обеспечить быструю загрузку. Вы пытаетесь отказаться от этой функциональности, тем самым делая бессмысленным использование ListView.

Заполнение LinearLayout программным способом не представляет особой проблемы. У вас есть XML-файл для ваших строк? Накачайте его для каждой новой строки, когда вы запускаете чрезвычайно простой цикл for через массив или while цикл через курсор, связываете данные и добавляете их в LinearLayout.

.

Готово. Нет проблем с прокруткой ... все это обрабатывается ScrollView, как и должно быть.

0 голосов
/ 13 ноября 2014

создать представление прокрутки во время выполнения следующим образом.

 //find parent xml layout
         LinearLayout lL1 =(LinearLayout)rootView.findViewById(R.id.pro_scroll);

        //Create ScrollView programatically 
            ScrollView _scrollView  = new ScrollView(appContext);
           _scrollView.setBackgroundColor(Color.WHITE);
           _scrollView.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT,
    LayoutParams.MATCH_PARENT));

        ViewGroup layout=new LinearLayout(appContext);
                           layout.setLayoutParams(new   ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));

//add scrollview to layout 
                           layout.addView(_scrollView);
//add layout to xml parent layout
                           lL1.addView(layout);
0 голосов
/ 07 марта 2012

Попробуйте это,

private ListView first, second;
private String check="";
String[] COUNTRIES = new String[] { "Afghanistan", "Albania",
        "Algeria", "American Samoa", "Andorra", "Angola", "Anguilla",
        "Antarctica", "Antigua and Barbuda", "Argentina", "Armenia",
        "Aruba", "Australia", "Austria", "Azerbaijan", "Bahrain",
        "Montserrat", "Morocco",
        "Mozambique", "Myanmar", "Namibia", "Nauru", "NepalA",
        "Montserrat", "MoroccoF",
        "Mozambique", "Myanmar", "Namibia", "Nauru", "NepalB",
        "Montserrat", "MoroccoD",
        "Mozambique", "Myanmar", "Namibia", "Nauru", "NepalC",

};

String[] COUNTRIES1 = new String[] { "Martinique",
        "Mauritania", "Mauritius", "Mayotte", "Mexico", "Micronesia",
        "Moldova", "Monaco", "Mongolia", "Montserrat", "Morocco",
        "Mozambique", "Myanmar", "Namibia", "Nauru", "Nepal", };
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    first = (ListView) findViewById(R.id.firstlist);
    second = (ListView) findViewById(R.id.secondlist);

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, COUNTRIES);
    ArrayAdapter<String> adapter1 = new ArrayAdapter<String>(this,
            android.R.layout.simple_list_item_1, COUNTRIES1);

    first.setAdapter(adapter);
    second.setAdapter(adapter1);

     second.setOnTouchListener(new OnTouchListener() {
     @Override
     public boolean onTouch(View arg0, MotionEvent arg1) {
         check="second";
     return false;
     }
      });

     first.setOnTouchListener(new OnTouchListener() {
         @Override
         public boolean onTouch(View arg0, MotionEvent arg1) {
             check="first";
         return false;
         }
          });
     first.setOnScrollListener(newScrollEvent);
     second.setOnScrollListener(newScrollEvent);
}

private OnScrollListener newScrollEvent = new OnScrollListener() {

    @Override
    public void onScrollStateChanged(AbsListView view, int scrollState) {
        // TODO Auto-generated method stub

    }

    @Override
    public void onScroll(AbsListView view, int firstVisibleItem,
            int visibleItemCount, int totalItemCount) {
        // TODO Auto-generated method stub
        if(check.equalsIgnoreCase("first")){
         System.out.println("first");

         if (first.getChildAt(0) != null) {
         Rect r1 = new Rect();
         first.getChildVisibleRect(first.getChildAt(0), r1, null);
         second.setSelectionFromTop(first.getFirstVisiblePosition(),
         r1.top);
         }
        }
        else if(check.equalsIgnoreCase("second")){
        if (second.getChildAt(0) != null) {
         Rect r1 = new Rect();
         second.getChildVisibleRect(second.getChildAt(0), r1, null);
         first.setSelectionFromTop(second.getFirstVisiblePosition(),
         r1.top);
         }
         }
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...