2014-09-09 2 views
0

빌드 대상 클라이언트에서 '뉴스'섹션을 포함하여 많은 콘텐츠 주위에서 스크롤 뷰를 감싸는 기능이 필요합니다. 이 때문에 ListView를 사용할 수 없습니다. 모든 ListItem보기를 수동으로 세로 LinearLayout으로 확대하려고합니다. ListView의 최적화 기능을 잃어 버릴 것이라는 것을 깨달았지만, 고객이 원하는 것이므로 그렇게해야합니다. 내 솔루션이 작동해야한다고 생각하지만 화면에 아무런 견해가 표시되지 않습니다. 내있는 ScrollView 내부에있는 LinearLayout, 그리고 그 안에 두 번째의 LinearLayout입니다 :LinearLayout에 동적으로 추가 된 뷰가 표시되지 않습니다.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:paddingTop="5dp" 
android:paddingBottom="5dp" 
android:orientation="horizontal" 
android:onClick="newsListItemClick" 
android:background="@color/test_green"> 

<com.android.volley.toolbox.NetworkImageView 
    style="@style/thumbnail_image" 
    android:id="@+id/news_list_item_image" 
    android:layout_width="@dimen/thumbnail_width" 
    android:layout_height="@dimen/thumbnail_height" /> 

<LinearLayout 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

    <TextView 
     style="@style/headline_text" 
     android:id="@+id/news_list_item_headline" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

    <TextView 
     style="@style/promo_text" 
     android:id="@+id/news_list_item_promo_brief" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

내가 '마지막 코드 : 여기

<!-- News Fragment --> 
     <LinearLayout 
      android:id="@+id/news_frag" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content" 
      android:orientation="vertical" 
      android:background="@color/test_yellow"/> 

이 NewsListItem의 레이아웃 파일은 프로그래밍 방식으로. newsRequest이() 나는 onCreateView에서 만드는 마지막 호출입니다 : 그것은 addView를 호출하고 뷰 그룹의 컨테이너에 내 부풀려를 부착만큼이나 쉽게, 내가 읽은

private void newsRequest() { 
    Log.d("snw", "newsRequest()"); 
    JsonArrayRequest jsonRequest = new JsonArrayRequest(NEWS_FEED_URL, 
      new Response.Listener<JSONArray>() { 

     @Override 
     public void onResponse(JSONArray response) { 
      for (int i = 0; i < response.length(); i++) { 
       try { 
        NewsListItem item = new NewsListItem((JSONObject) response.get(i)); 
        View view = addNewsToView(item); 
        containerView.addView(view); 
        containerView.invalidate(); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
      containerView.bringToFront(); //something I tried, didn't help 
      containerView.postInvalidate(); //Same as above 
     } 

    }, new Response.ErrorListener() { 

     @Override 
     public void onErrorResponse(VolleyError error) { 
      error.printStackTrace(); 
     } 

    }); 

    volleyQueue.add(jsonRequest); 
} 

private View addNewsToView(NewsListItem item) { 
    Log.d("snw", "addNewsToView()"); 
    ViewHolder holder; 
    View view = new View(getActivity()); 

    if (view.getTag() == null) { 
     Log.d("snw", "Holder was null, inflating view"); 
     LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     view = inflater.inflate(R.layout.news_list_item, null); 

     // set up ViewHolder 
     holder = new ViewHolder(); 
     holder.thumbnail = (NetworkImageView) view.findViewById(R.id.news_list_item_image); 
     holder.headline = (TextView) view.findViewById(R.id.news_list_item_headline); 
     holder.promoBrief = (TextView) view.findViewById(R.id.news_list_item_promo_brief); 

     //set custom fonts 
     Typeface futuraBold = 
       Typeface.createFromAsset(view.getContext().getAssets(), "fonts/futura_today_bold.ttf"); 
     Typeface futuraLight = 
       Typeface.createFromAsset(view.getContext().getAssets(), "fonts/futura_today_light.ttf"); 

     holder.headline.setTypeface(futuraBold); 
     holder.promoBrief.setTypeface(futuraLight); 

     // store holder with the view 
     view.setTag(holder); 
    } 
    else { 
     holder = (ViewHolder) view.getTag(); 
    } 
    holder.headline.setText(item.getHeadline()); 
    holder.promoBrief.setText(item.getPromoBrief()); 
    holder.thumbnail.setImageUrl(UrlBuilder.buildUrl(item.getImgUrl()), 
      VolleySingleton.getInstance(getActivity()).getImageLoader()); 


    return view; 
} 

private class ViewHolder { 
    NetworkImageView thumbnail; 
    TextView headline; 
    TextView promoBrief; 
} 

모든이가 잘 작동한다 제안하는있는 LinearLayout . 첨부하기 전에 LayoutParameters를 뷰에 수동으로 설정하라는 제안을 몇 가지 읽은 적이 있지만이 경우까지는 아무런 효과가 없습니다. 어떤 통찰력?

+0

이나요 : :) 내가 예를 발견

, ListView에 내 그들처럼 행동 아래 위 요소를 발견? – sahu

답변

0

위와 아래 내용을 스크롤해야하는 경우에도 ListView를 사용하기위한 아이디어가 있습니다. ListView에 바닥 글과 머리글을 정의 할 수 있습니다. 이렇게하면 위와 아래가 예상대로 표시됩니다. 나를 위해 이런 모습 :

View headerView = inflater.inflate(R.layout.my_header_layout, null, false); 
this.footer = new MyFooterView(getActivity()); 
this.interactionsList.addHeaderView(headerView); 
this.interactionsList.addFooterView(this.footer); 

매력처럼 작동합니다. 당신이 솔루션을 얻을 https://www.youtube.com/watch?v=pAiHQAE5G6c

관련 문제