1

は、同じアクティビティで2つのListViewを絞り込もうとしました。これは、標準(垂直)LinearLayoutに含まれる2つの別々のListFragmentを使用して動作します。2つのListViewをスクロールして、LinearLayoutを代入しようとしました。

問題は、2つのリストが一緒に画面より長くなっているため、2番目のリストが部分的に隠されていることです。視覚的には、ユーザは画面全体をドラッグして2番目のリストを表示することを期待しています。しかし、2つのリストは独自の内部スクロールを持ち、画面全体を1つのスクロールとしてスクロールすることはできません。

幸いなことに、リストには実際には非常に少ないアイテムが含まれています(平均5個)。ですから、理論的には、代わりに2つのLinearLayoutsコンテナを配置することができました。問題は、リストによって表示されるデータがカーソルから来て、動的であることです。私はCursorAdapterのnewView()メソッドとbindView()メソッドを認識していますが、リストビューの代わりにLinearLayoutコンテナにアダプタをどのように接続できるかはよく分かりません。私。 CursorAdapterは、カーソル内にある5つの項目のうち5つの行項目を作成する必要があることをどのようにして知っていますか? LinearLayoutコンテナにカーソル項目を反復して項目を作成するループはどこで作成しますか?また、Cursorのデータが変更されたときに、LinearLayoutの内容をどのように更新するのですか?これらの問題をListActivityによって提供されるListViewにきれいにラップしているすべての例ですが、ListViewを使用することはできません!

私は混乱しています!マヌー

EDIT

:ここはbreceivemail提案下記(断片)活性のXMLレイアウトです。コメントはBreceivemailの提案の前に、元のLinearLayoutコンテナです。また、アクティビティ全体がTabHostに含まれていることにも注意する必要がありますが、それが手元の問題のために何か違いを生むかどうかはわかりません。

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
        android:layout_width="fill_parent" 
        android:layout_height="fill_parent"> 

<LinearLayout android:orientation="vertical" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content"> 
<!--    
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
        android:orientation="vertical" 
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"> 
--> 

    <TextView android:id="@+id/title" 
       android:textSize="36sp" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/SelectPlayer"/> 

    <TextView android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/Playing" 
       android:textSize="18sp" 
       android:textStyle="bold" 
       android:textColor="#000000" 
       android:background="#999999"/> 

    <fragment android:name="com.myDomain.myApp.PlayerListFragment" 
       android:id="@+id/playing" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" /> 

    <TextView android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="@string/Reserve" 
       android:textSize="18sp" 
       android:textStyle="bold" 
       android:textColor="#000000" 
       android:background="#999999"/> 

    <fragment android:name="com.myDomain.myApp.PlayerListFragment" 
       android:id="@+id/reserve" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" /> 

</LinearLayout>  

</ScrollView> 
+0

2つのリストビューが画面サイズに合うように、レイアウトを作成するほうがよいソリューションではないでしょうか? – kaspermoerch

+0

これは公正なコメント@ KasperMoerchですが、リスト項目の高さはデザインによって非常に大きくなります。リスト項目は、特に最初のリストにある項目をすばやくタップする必要があります。大きなものは、それに到達してやりとりする方が速いというUI原則です。 – manu3d

+0

これはすべて公平ですが、ListViewの一般的な点は、スクロール可能であることです。つまり、リスト内の必要なポイントにスクロールするだけで、1つの画面に2つのListViewがある場合は、それぞれの画面。私はあなたが何らかのゲームを作っているという印象を受けました。これはすばらしいことです。これを批判や頑固なものと見なすべきではありません。私はあなたのUIデザインの選択に挑戦しようとしています。より良い解決策があるかもしれません。 – kaspermoerch

答えて

0

リストビューを縦スクロールします。以下のトリックで、スクロール可能なリストビューを垂直スクロールの内側に置くことができます。次のコードを使用して、お楽しみください!

private int listViewTouchAction; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     //... 

     setListViewScrollable(myListView1); 
     setListViewScrollable(myListView2); 
    } 

    private void setListViewScrollable(final ListView list) { 
      list.setOnTouchListener(new OnTouchListener() { 
       @Override 
       public boolean onTouch(View v, MotionEvent event) { 
        listViewTouchAction = event.getAction(); 
        if (listViewTouchAction == MotionEvent.ACTION_MOVE) 
        { 
         list.scrollBy(0, 1); 
        } 
        return false; 
       } 
      }); 
      list.setOnScrollListener(new OnScrollListener() { 
       @Override 
       public void onScrollStateChanged(AbsListView view, 
         int scrollState) { 
       } 

       @Override 
      public void onScroll(AbsListView view, int firstVisibleItem, 
        int visibleItemCount, int totalItemCount) { 
       if (listViewTouchAction == MotionEvent.ACTION_MOVE) 
       { 
        list.scrollBy(0, -1); 
       } 
      } 
     }); 
    } 

listViewTouchActionはグローバル整数値です。

+0

親愛なる@breceivemail、あなたの努力に感謝します。残念ながら、これは動作していないようです。コードは機能的ですが、オリジナルの投稿に追加したレイアウトと合わせて、2つのリストビューをずっと短くし、内部スクロールを保持します。単一のビューとしてスクロールしません。さらに、1つのリストを少しドラッグするたびに、アイテムのビューは少なくなり、最終的には消えて、すべてのアイテムは何とか​​隠されています。 質問:listViewTouchAction変数について記述するとき、Activity-globalまたはApplication-globalを意味しますか? – manu3d

+0

私はAsus Eee、Gallagxyタブ、およびすべてのエミュレータでテストしました。 – breceivemail

関連する問題