2010-06-28 6 views
27

중첩 된 목록보기가 가능합니까?android nested listview

즉 다른 목록보기의 행에 포함 된 listView입니까? 내 주요 목록은 블로그 포스트를 표시 한 다음 각 행에, 각 게시물에 대한 덧글에 대한 또 다른 목록보기를 할 위치

예를 들어 같은

답변

31

나는 그래서 내가 그것을 해결하기 위해 무슨 짓을, 오늘 같은 문제가 없었다
LinearLayout list = (LinearLayout) myView.findViewById(R.id.list_musics); 
list.removeAllViews(); 

for (Music music : albums.get(position).musics) { 
    View line = li.inflate(R.layout.inside_row, null); 

    /* nested list's stuff */ 

    list.addView(line); 
} 

그래서 다시 시작하면 ListView에 중첩 할 수 없지만 LinearLayout을 사용하여 행에 목록을 만들고 코드로 채울 수 있습니다.

+0

나열 할 리스너가 작동하지 않습니다. 어떤 해결책? –

+0

감사합니다. 그거 좋은 생각이야. –

+0

목록 내에서 목록을 구현하고 싶지만 구현할 수 없습니다.이 문제를 해결하기위한 대안이 있습니까? 확장 가능한 ListView는 예외입니다. – seon

6

This 사운드 (즉, 접을 수있는 것) 일 것입니다 무슨 너 찾고있어? 그렇지 않다면, 또는 이것이 작동하지 않는다면 블로그 게시물 중 하나, 댓글 두 번째 등 두 가지 목록보기를 제안하고 블로그 게시물 항목에 대한 작업은 두 번째보기로 연결됩니다. 관련 의견으로 채워집니다.

+0

불행히도, 우리는 주석을 인라인으로 표시하고 싶습니다. 그래서 다른 활동에서 열지 않으면 작동하지 않을 것입니다. – Ben

10

ExpandableListView을 찾으십니까? 물론 두 가지 수준의 목록으로 제한되어 있습니다 (하지만 필요에 따라 작동하는 것처럼 들릴 수도 있음).

을 나는 CustomAdapter로, ListView를을 가지고 있고, customAdapter의의 getView에, 나는 이런 식으로 뭔가를 :

+0

글쎄, 그 일은, 그 목록을 exapandible되고 싶지 않아 ... 난 그냥 일부 중첩 된 데이터를 보여주고 싶다 ... 즉, 원래의 블로그 게시물, 다음 2 분의 3 가장 최근의 의견, 그리고 아마도 '모든 댓글보기'버튼 ... – Ben

+0

저에게는 다른 레이아웃처럼 들립니다. 나는 어떤 종류의 컨테이너 (LinearLayout, RelativeLayout, 무엇이든)를 블로그 게시물의 TextView와 주석의 ListView로 보았습니다. 처음 몇 개의 코멘트를 목록보기에로드하고 나머지 코멘트를로드하는 마지막 목록 항목에 대한 클릭 리스너를 구현하십시오. 내 $ .02 어쨌든. – kiswa

+0

그래, 각 블로그 게시물 아래에 여러 개의 블로그 게시물과 여러 개의 댓글이있을 것입니다.그래서 내 행 뷰 레이아웃에 목록 뷰가 포함되어 테스트를 시도했습니다. 그런 다음 간단한 배열 목록 어댑터를 사용하여 하드 코딩 된 더미 문자열을 사용하여 렌더링 할 수 있는지 확인했습니다. 렌더링 된 내부 목록보기에는 스크롤 막대가있는 것처럼 보였지만 목록은 스크롤 할 수 없었습니다. 그것은 해킹 된 iframe처럼 보였습니다. 다만 내가 한 일에 상관없이 첫 번째 행만 보여주었습니다. 높이 = fill_parent조차도 효과가 없습니다. 내 다음 접근 방식은 목록에 중첩 된 테이블보기를 시도하는 것입니다. – Ben

0

당신은 이런 식으로 작업을 수행 할 수 있습니다

상위 목록보기 행 XML 레이아웃 내부

다음 표 레이아웃

<TableLayout 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/table_show" 
     android:background="#beb4b4"> 
    </TableLayout> 

를 추가 한 다음 이름 reply_row.xml와 자식 목록의 레이아웃을해야 부모 목록보기 어댑터의 getView 방법에

<?xml version="1.0" encoding="utf-8"?> 
<TableRow android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:layout_marginTop="3dp" 
    xmlns:android="http://schemas.android.com/apk/res/android"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/tv_reply_row" 
     android:textColor="#000"/> 
</TableRow> 

추가 다음 코드를

TableLayout replyContainer = (TableLayout) 
// vi is your parent listview inflated view 
vi.findViewById(R.id.table_show); 
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 


     //child listview contents list 
     String [] replys = {"a","b","c","d"}; 

     for (int i=0;i<replys.length;i++) 
     { 
     final View comments = inflater.inflate(R.layout.reply_row, null); 
     TextView reply_row = (TextView) comments.findViewById(R.id.tv_reply_row) ; 
     reply_row.setText(replys[i]); 

//for changing your tablelayout parameters 
     TableLayout.LayoutParams tableRowParams=new TableLayout.LayoutParams 
         (TableLayout.LayoutParams.FILL_PARENT,TableLayout.LayoutParams.WRAP_CONTENT); 

     int leftMargin=3; 
     int topMargin=2; 
     int rightMargin=3; 
     int bottomMargin=2; 
     tableRowParams.setMargins(leftMargin, topMargin, rightMargin, bottomMargin); 
     comments.setLayoutParams(tableRowParams); 
      TableRow tr = (TableRow) comments; 
      replyContainer.addView(tr); 
      } 
0

중첩되지 않은 하나의 ListView를 사용하는 것이 좋습니다. ListView를 중첩하는 것은 비효율적 인 방법입니다. ListView가 원활하게 스크롤되지 않고 더 많은 메모리를 차지하지 않을 수 있습니다.

하나의 ListView에 중첩 데이터를 표시하도록 데이터 구조를 구성 할 수 있습니다. 또는이 프로젝트 PreOrderTreeAdapter을 사용할 수 있습니다. 중첩 된 데이터를 ListView 또는 RecyclerView에 표시하는 것이 편리합니다. ListView 또는 RecyclerView를 접을 수있게 만드는 데 사용할 수 있습니다. 어댑터에 알리는 것보다 데이터를 제공하는 방식 만 변경하면됩니다.