0

我想添加一个自定义视图,我对我的适配器。我试图这样做,以添加一个视图,以通过commonsware合并适配器。试图膨胀布局在活动不工作

https://github.com/commonsguy/cwac-merge

这是我的我的代码试图夸大布局:

LayoutInflater inflater = getLayoutInflater(); 
    LinearLayout row = (LinearLayout) inflater.inflate(R.layout.row, 
      null); 


     TextView headerOne = (TextView) row 
       .findViewById(R.id.titleTextView); 
     TextView headerTwo = (TextView) row 
       .findViewById(R.id.titleTextView); 
     headerOne.setText("One"); 
     headerTwo.setText("Two"); 

     mergeAdapter.addView(headerOne); 
     mergeAdapter.addAdapter(myArrayAdapter); 

     mergeAdapter.addView(headerTwo); 
     mergeAdapter.addAdapter(myOtherArrayAdapter); 

这是我的XML。

<LinearLayout 
    android:layout_width="0dp" 
    android:layout_height="wrap_content" 
    android:layout_margin="16dp" 
    android:layout_weight="1" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/titleTextView" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:fontFamily="sans-serif-condensed" 
     android:text="message text" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:textColor="@color/text_gray" 
     android:textStyle="bold" /> 

    <View 
     android:layout_width="fill_parent" 
     android:layout_height="1dip" 
     android:background="#000000" /> 
</LinearLayout> 

更新:忘了,说说我的 “问题” 是什么。首先,我之前从未夸大布局,所以我不确定它是如何工作的,以及膨胀的正确方法。其次,我得到这个错误:

01-20 23:18:46.427: E/AndroidRuntime(24810): java.lang.ClassCastException: android.widget.LinearLayout$LayoutParams cannot be cast to android.widget.AbsListView$LayoutParams 

编辑:

我进口:

import android.content.Context; 
import android.content.SharedPreferences; 
import android.database.Cursor; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.support.v4.app.NavUtils; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.widget.ArrayAdapter; 
import android.widget.TextView; 

import com.actionbarsherlock.app.SherlockListActivity; 
import com.actionbarsherlock.view.Menu; 
import com.actionbarsherlock.view.MenuItem; 
import com.commonsware.cwac.merge.MergeAdapter; 
import com.google.gson.JsonObject; 
import com.koushikdutta.async.future.FutureCallback; 
import com.koushikdutta.ion.Ion; 

import com.eghdk.myapp.R; 
import com.eghdk.myapp.util.AppUtil; 
import com.eghdk.myapp.util.DatabaseHelper; 

public class MyActivity extends SherlockListActivity { 
+1

什么问题?两个标题都显示“一个”?你必须膨胀两个不同的行变量。你正在重复使用相同的“行”视图的两个头。 –

+0

@ A - C用我的“问题”更新了我的问题抱歉! – EGHDK

+0

一旦你弄明白了,我指出的另一个问题。对于这个'CCE',我在* Merge Demo *中看到'Button'是用Activity Context创建的;它没有膨胀。这样做有效吗? –

回答

0

更改您的以下行

LinearLayout row = (LinearLayout) inflater.inflate(R.layout.row, 
     null); 

View row = inflater.inflate(R.layout.row, 
     null); 
+0

试过这个,并得到:01-20 23:42:45.505:E/AndroidRuntime(28738):java.lang.ClassCastException:android.widget.LinearLayout $ LayoutParams不能转换为android.widget.AbsListView $ LayoutParams – EGHDK

+0

请张贴一些更多的代码。 @EGHDK您发布的代码不足以解决您的问题。 – GrIsHu

+0

我现在包括我的包括陈述 – EGHDK

0

我想,你没有添加viewparent

尝试

yourParent.addView(row);

哪里yourParent是你需要附上这个row

0

试试这个布局...

LayoutInflater inflater = getLayoutInflater(); 

    LinearLayout row = (LinearLayout) inflater.inflate(R.layout.row, null); 
    TextView headerOne = (TextView) row.findViewById(R.id.titleTextView); 
    headerOne.setText("One"); 
    ViewParent parent = row.getParent(); 
    if(parent != null && parent instanceof ViewGroup) { 
     ((ViewGroup)parent).removeView(row); 
    } 
    AbsListView.LayoutParams layoutParams = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT); 
    row.setLayoutParams(layoutParams); 

    mergeAdapter.addView(row); 
    mergeAdapter.addAdapter(myArrayAdapter); 

    row = (LinearLayout) inflater.inflate(R.layout.row, null); 
    TextView headerTwo = (TextView) row.findViewById(R.id.titleTextView); 
    headerTwo.setText("Two"); 
    parent = row.getParent(); 
    if(parent != null && parent instanceof ViewGroup) { 
     ((ViewGroup)parent).removeView(row); 
    } 
    layoutParams = new AbsListView.LayoutParams(AbsListView.LayoutParams.MATCH_PARENT, AbsListView.LayoutParams.WRAP_CONTENT); 
    row.setLayoutParams(layoutParams); 

    mergeAdapter.addView(row); 
    mergeAdapter.addAdapter(myOtherArrayAdapter); 
+0

01-20 23:50:13.699:E/AndroidRuntime(29425):java.lang.ClassCastException:android.widget.LinearLayout $ LayoutParams不能转换为android.widget.AbsListView $ LayoutParams – EGHDK

+0

@EGHDK您应该添加实例LinearLayout到合并适配器,而不是TextView,因为TextView是LinearLayout的子项,它具有LinearLayout.LayoutParams ... –

+0

@EGHDK请参阅我编辑的答案... –

0

尝试删除以下l国家统计局。

LinearLayout row = (LinearLayout) inflater.inflate(R.layout.row, null); 

取而代之的是下面的代码。

View row = inflater.inflate(R.layout.row, null); 
+0

答案与[此答案在这个完全相同之间有什么区别问题?](http://stackoverflow.com/a/21249293/1815485) –

2

使用两级布局的资源,而不是一个请遵守良好做法。不要膨胀布局,然后尝试分割布局并单独使用它们。

或者,换一种方式,价值传递给addView()需要为下列之一:

  • inflate(),或
  • 东西直接结果你在Java中创建使用构造
+0

啊哈。得到它的工作。谢谢。 – EGHDK