2013-02-27 2 views
0

이 질문에 대한 답변을 찾을 수 있습니다. 이론적으로는 대답을 알고 있지만,이 경우에는 제대로 작동하지 않습니다.ListView에 사용자 지정 LinearLayout 삽입 프로그래밍 방식으로

은 내가 row_base.xml 올바른 팽창, 사용자 정의 BaseAdapter

@Override 
public Row getView(int position, View convertView, ViewGroup parent) 
{ 
    ... 

    Row view = (Row) convertView; 
    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

    if (view == null) 
    { 
     view = (JVxDataRow) mInflater.inflate(R.layout.row_base, null);; 
     ... 
    } 
    ... 
} 
    return view; 
} 

이 잘 작동이 있고, 내 목록보기는 모든 항목을 가져옵니다. row_base.xml 만의 구성 :

<?xml version="1.0" encoding="utf-8"?> 
<mh.android.ui.Row 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/datarow" 
android:layout_width="match_parent" 
android:layout_height="wrap_content" 
android:paddingLeft="20dp" 
android:paddingTop="20dp" 
android:paddingBottom="20dp" 
android:paddingRight="20dp" /> 

그러므로 내가 그 파일을 제거하고 대신 프로그래밍 방식을 인스턴스화합니다. 이 내 코드는 - - 작동하지 않는 다음과 같습니다 :

@Override 
public Row getView(int position, View convertView, ViewGroup parent) 
{ 
    ... 

    Row view = (Row) convertView; 
    LayoutInflater mInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE); 

    if (view == null) 
    { 
     view = new Row(context); 
     ... 
    } 
    ... 
} 
    return view; 
} 

얻을 그것을 내가 행의 생성자에서 일부 layoutparameters을 넣어야 할 일을하고 생성자에 onFinishInflate에서 부풀려 이동 :

public Row(Context context) 
{ 
    super(context); 
    AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.WRAP_CONTENT, AbsListView.LayoutParams.WRAP_CONTENT); 

    this.setLayoutParams(params); 
    this.setPadding(20, 20, 20, 20); 
    this.setOrientation(LinearLayout.VERTICAL); 

    inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    container = inflater.inflate(R.layout.datarow3, this, true); 

    this.addView(container); 
} 

datarow3.xml 보인다 :

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/table_row_container" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 

<mh.android.ui.DataItem 
    android:id="@+id/dataitem_slot1" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true" > 
</mh.android.ui.DataItem> 
<mh.android.ui.DataItem 
    android:id="@+id/dataitem_slot2" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:singleLine="true" > 
</mh.android.ui.DataItem> 
</LinearLayout> 

내가 프로그램의 인스턴스를 XML을 팽창에서 변경할 때 문제가 BaseAdapter에, listview는 LinearLayout 안에있다.

이제 예외 :

E/AndroidRuntime(13203): FATAL EXCEPTION: main 
E/AndroidRuntime(13203): java.lang.ClassCastException:  android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 
E/AndroidRuntime(13203): at android.widget.ListView.measureScrapChild(ListView.java:1170) 
E/AndroidRuntime(13203): at android.widget.ListView.measureHeightOfChildren(ListView.java:1252) 
E/AndroidRuntime(13203): at android.widget.ListView.onMeasure(ListView.java:1162) 
E/AndroidRuntime(13203): at android.view.View.measure(View.java:15288) 
E/AndroidRuntime(13203): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4876) 
E/AndroidRuntime(13203): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1396) 
E/AndroidRuntime(13203): at android.widget.LinearLayout.measureVertical(LinearLayout.java:681) 
E/AndroidRuntime(13203): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
E/AndroidRuntime(13203): at android.view.View.measure(View.java:15288) 
E/AndroidRuntime(13203): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4876) 
E/AndroidRuntime(13203): at android.widget.FrameLayout.onMeasure(FrameLayout.java:310) 
E/AndroidRuntime(13203): at android.view.View.measure(View.java:15288) 
E/AndroidRuntime(13203): at android.widget.LinearLayout.measureVertical(LinearLayout.java:833) 
E/AndroidRuntime(13203): at android.widget.LinearLayout.onMeasure(LinearLayout.java:574) 
E/AndroidRuntime(13203): at android.view.View.measure(View.java:15288) 
E/AndroidRuntime(13203): at 

잘못이 무엇이야? 감사합니다.

답변

1

왜 모든 댓글은 없어 졌습니까? 내 문제에 대한 해결책은 :

container = inflater.inflate(R.layout.datarow3, this, true); 
this.addView(container); 

후 추가를 팽창 할 필요가 없습니다

inflater.inflate(R.layout.datarow3, this, true); 

레이아웃으로 변경되었습니다.

관련 문제