2011-08-10 3 views
1

전체를 스크롤해야하는 레이아웃이 있습니다. 레이아웃에는 목록보기가 포함되어있어 불화가 생깁니다. 여기에 무슨 일이 일어나고있는 겁니까? listviewderp목록보기 안드로이드에서 내부 스크롤을 사용하지 않음

그래서 자신의 작은 세계에서 스크롤을하는 것을 볼 수 있습니다. 스크롤을 위해 전체 레이아웃이 커지도록 확장 기능을 비활성화해야합니다. 나는 <scrollview><linearlayout>mystuff</linearlayout></scrollview>에 캡슐화를 시도했지만 아무 소용이 없습니다. 나는 "match_parent""wrap_content"layout_heights으로 무한한 조합을 시도했다. 나는 그 자체의 스크롤하는 세계에 자신을 넣지 않고 바깥쪽으로 성장하기 위해 listview가 정말로 필요하다.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
android:gravity="center" 
> 
    <TableLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 
     <TableRow> 
      <TableLayout android:layout_span="2" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"> 
       <TableRow android:gravity="center"> 
        <Button android:id="@+id/vin_btn" 
         android:width="@dimen/inb_btn_w" 
         android:height="@dimen/inb_btn_h" 
         android:text="@string/inb_vin_btn" 
         android:textSize="@dimen/inb_txt_sz" /> 
        <Button android:id="@+id/clear_btn" 
         android:width="@dimen/inb_btn_w" 
         android:height="@dimen/inb_btn_h" 
         android:text="@string/inb_sc_btn" 
         android:textSize="@dimen/inb_txt_sz" /> 
        <Button android:id="@+id/transmit_btn" 
         android:width="@dimen/inb_btn_w" 
         android:height="@dimen/inb_btn_h" 
         android:text="@string/inb_tr_btn" 
         android:textSize="@dimen/inb_txt_sz"/> 
       </TableRow> 
      </TableLayout> 
     </TableRow> 
     <TableRow android:gravity="center_vertical" 
      android:layout_width="fill_parent"> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_cust" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_cust"/> 
      <Spinner 
       android:layout_width="fill_parent" 
       android:layout_weight="1" 
       android:id="@+id/cust_spn"/> 
     </TableRow> 
     <TableRow android:layout_width="fill_parent"> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_drv" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_drv"/> 
      <EditText 
       android:id="@+id/drv_in" 
       android:inputType="number" 
       android:layout_width="fill_parent" 
       android:layout_weight="1" 
       android:singleLine="true"/> 
     </TableRow> 
     <TableRow android:gravity="center_vertical"> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_prd" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_prd"/> 
      <Spinner 
       android:id="@+id/prd_spn" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"/> 
     </TableRow> 
     <TableRow android:gravity="center_vertical"> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_scale" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_scale"/> 
      <Spinner 
       android:id="@+id/scale_spn" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"/> 
     </TableRow> 
     <TableRow android:gravity="center_vertical"> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_dir" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_dir"/> 
      <Spinner 
       android:id="@+id/dir_spn" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"/> 
     </TableRow> 
     <TableRow> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_make" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_make"/> 
      <EditText 
       android:id="@+id/make_in" 
       android:singleLine="true" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"/> 
     </TableRow> 
     <TableRow> 
      <TextView 
       android:gravity="right" 
       android:id="@+id/text_tag" 
       android:textSize="@dimen/inb_txt_sz" 
       android:text="@string/inb_tag"/> 
      <EditText 
       android:id="@+id/tag_in" 
       android:singleLine="true" 
       android:layout_width="fill_parent" 
       android:layout_weight="1"/> 
     </TableRow> 
    </TableLayout> 
    <ListView android:id="@+id/vin_list" 
      android:isScrollContainer="false" 
      android:layout_weight="1" 
      android:layout_height="match_parent" 
      android:layout_width="match_parent" /> 
</LinearLayout> 

행 레이아웃은 아래에 정의됩니다

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:padding="4dip"> 
    <TableLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:gravity="center_vertical|left"> 
     <TableRow> 
      <TextView android:id="@+id/vin" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textSize="20sp"/> 
     </TableRow> 
     <TableRow> 
      <TextView android:id="@+id/desc" 
        android:layout_width="wrap_content" 
        android:layout_height="wrap_content" 
        android:textSize="12sp"/> 
     </TableRow> 
    </TableLayout> 
</LinearLayout> 

답변

0

당신은 단순히 선형 레이아웃에서 모든 행을 둘 수 있었다. 난 당신이 이미 행 레이아웃을 정의했다고 가정합니다. 당신이해야 할 일은 데이터를 순환시켜 각 항목에 대해 하나의 행을 팽창시키는 것입니다. listview는 스크롤 할 것을 권장하며 모든 항목을 한 번에 표시하는 것보다 적은 리소스를 소비하기 위해 많은 트릭을 사용합니다.

+0

위 행 레이아웃을 추가했습니다. 보시다시피, 이미 LinearLayout에 있습니다. – moonlightcheese

5

우선, 레이아웃의 루트 항목으로 ScrollView를 추가하면 레이아웃의 모든 항목을 스크롤 할 수 있습니다 (작은 화면 전화의 기존 TableLayout에 필요함).

그런 다음 수직있는 LinearLayout하여 ListView를 교체하고 유사한 방법으로 필요에 따라 수동으로 많은 행을 부풀려 :

LinearLayout llContainer = (LinearLayout) findViewById(R.id.yourBottomLinearLayout); 

LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); 

for (Item item : mListItems){   
    LinearLayout llItem = (LinearLayout) inflater.inflate(R.layout.row, null); 
    TextView vin = (TextView) llItem.findViewById(R.id.vin); 
    vin.setText(item.getFirstText()); 
    TextView desc = (TextView) llItem.findViewById(R.id.desc); 
    desc.setText(item.getSecondText()); 
    // To know wich item has been clicked 
    llItem.setTag(item.getId()); 
    // In the onClickListener just get the id using getTag() on the view 
    llItem.setOnClickListener(this); 
    llContainer.addView(llItem); 
} 
필요에 따라있는 ScrollView만큼 크기를 증가하고 당신이 스크롤 할 수

전체 화면.

+0

음 ... 업데이트가 이루어질 때마다보기가 팽창해야하기 때문에 이것은 비효율적입니다. 이 사용자 지정 어댑터 및 창 밖으로 convertView 던졌습니다,하지만 난 할 일이 아니에요 내 자신의 ListView 클래스를 구축하지 않고 해당 기능을 얻으려면 방법이 나타납니다. 나는 정말로 안드로이드 플랫폼에 실망했다. 다시 한번 말하지만, 모든 목록보기가 자신의 스크롤 가능한 컨테이너가 아니란 것을 미리 예측하지 못했기 때문이다. – moonlightcheese

+0

세포가 많은 경우에는별로 효율적이지 않습니다. 방금 게시 한 다른 방법을 살펴보십시오. –

+0

나는 ListView처럼 좋지 않은 모든 vin 항목에서 업데이트하는 TextView를 구현했지만 결국 효과가있었습니다. 나는 많은 포맷팅 기능을 잃어 버렸고, 나는 이것에 대해 정말로 불쾌감을 느낍니다. 이것은 정말 Google이 생각해야만하는 것입니다.그러나 좀 더 우아하고 당신의 답변을 정확하다고 표시했는데 제 해결책은 게시가 가치가 없었습니다. 입력에 감사드립니다. – moonlightcheese

3

다른 더 나은 대답 (가 ... 늦게 어제)

당신은 간단한 목록보기 사용하고 헤더 TableLayout을 추가 할 수 있습니다

가있는 TableView에 대한 특정 레이아웃을 생성합니다. 에서 onCreate 방법에서

:이 방법

LayoutInflater inflater = LayoutInflater.from(getApplicationContext()); 
View headerView = inflater.(R.layout.header, mListView, false); 
mListView.addHeaderView(headerView); 

당신은 자동으로 ListView에 의해 관리되는 테이블 뷰가 포함 된 헤더를 가지고 보여 주었다 때 ListView에의 시작 부분에 사용자의 스크롤.

표준 어댑터에서 셀 재사용의 이점을 유지하십시오.

관련 문제