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 

EDIT:

Мой импорт:

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' создается с Контекстом активности; он не завышен. Работает ли это? –

ответ

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

Я думаю, вы не добавить view к parent

попробовать

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

Aha. Это работало. Благодарю. – EGHDK

Смежные вопросы