2013-06-23 1 views
0

У меня есть моя главная страница xml, в которую я хочу загрузить кнопку, если у пользователя нет чего-то в их базе данных.Попытка добавить xml динамически в android с помощью надувателя

Моя главная страница XML является:

<?xml version="1.0" encoding="utf-8"?> 
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 

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


    <TextView 
     android:id="@+id/beerTitle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:textSize="20sp" 
     android:textStyle = "bold" 
     android:padding="5dip" 
     > 
    </TextView> 

    <ImageView android:id="@+id/image" 
     android:layout_height="wrap_content" 
     android:layout_width="fill_parent" 
     android:layout_margin="10dip"/> 



    <TableLayout 

    android:id="@+id/tableLayout1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:layout_gravity="center_horizontal" 
    android:shrinkColumns="*" 
    android:stretchColumns="*"> 

    <TableRow 
     android:id="@+id/tableStatTitles" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 

     android:padding="5dip" > 

     <TextView 
      android:id="@+id/abvTitle" 
      android:text="ABV" 
      android:gravity="center" 
      android:textStyle = "bold" 
      android:textSize="20sp" 
      android:layout_weight="1" 

      ></TextView> 

     <TextView 
      android:id="@+id/IBUTitle" 
      android:text="IBU" 
      android:gravity="center" 
      android:textStyle = "bold" 
      android:textSize="20sp" 
      android:layout_weight="1" 

      ></TextView> 

     <TextView 
      android:id="@+id/glassTitle" 
      android:text="Glass" 
      android:gravity="center" 
      android:textStyle = "bold" 
      android:textSize="20sp" 
      android:layout_weight="1" 
      android:layout_width="wrap_content" 
      ></TextView> 


     </TableRow> 

    <TableRow 
     android:id="@+id/tableStat" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 

     android:padding="5dip" > 

     <TextView 
      android:id="@+id/abv" 
      android:text="" 
      android:gravity="center" 
      android:textSize="15sp" 
      android:layout_width="wrap_content" 
      ></TextView> 

     <TextView 
      android:id="@+id/IBU" 
      android:text="" 
      android:gravity="center" 
      android:textSize="15sp" 
      android:layout_width="wrap_content" 
      ></TextView> 

     <TextView 
      android:id="@+id/glass" 
      android:text="" 
      android:gravity="center" 
      android:textSize="15sp" 
      android:layout_width="wrap_content" 
      ></TextView> 


     </TableRow> 

    </TableLayout> 







    <Button 
     android:id="@+id/buttonBrewery" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dip" 
     android:text="" 
     android:onClick="viewBrewery" 
     /> 



    <Button 
     android:id="@+id/buttonStyle" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:padding="5dip" 
     android:text="" 
     android:onClick="viewStyle" 

     /> 



    <TextView 
     android:id="@+id/beerDescriptionTitle" 
     android:textStyle = "bold" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:textSize="20sp" 
     android:text="Description:" 
     android:padding="5dip" 
     ></TextView> 
    <TextView 
     android:id="@+id/beerDescription" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:ems="10" 
     android:textSize="15sp" 
     android:padding="5dip" 

     ></TextView> 

    <LinearLayout 
    android:id="@+id/addBeerLayout" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:orientation="vertical" > 

     </LinearLayout> 

</LinearLayout> 
</ScrollView> 

XML-стыковой Я хочу добавить:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="Add Beer" /> 

</LinearLayout> 

Я пытаюсь раздувать файл один XML в основной, с:

//inflate with add beer button 
       Inflater inflater; 
       LinearLayout addButton = (LinearLayout)findViewById(R.id.addBeerLayout); 
       addButton.addView(inflater.inflate(R.layout.addbeerbutton_layout, null)); 

My findviewbyid дает эту ошибку в затмении:

The method findViewById(int) is undefined for the type CheckBeerJSON 
and my inflate give this error in eclipse: 
The method inflate(byte[]) in the type Inflater is not applicable for the arguments (int, null) 
+1

сбой с использованием NullPointerException? – Blackbelt

+0

я добавил две ошибок я получаю на мой главный пост – Mike

+4

для первой ошибки вам нужен контекст, для второго правильного класса LayoutInflater – Blackbelt

ответ

1

Форма комментариев CheckBeerJSON Aynstask. Таким образом, вам нужен контекст, предложенный blackbelt. Передайте контекст активности в конструктор асинтез.

От вашего класса активности

 new CheckBeerJSON(ActivityName.this).execute(params); 

Затем в конструкторе AsyncTask.

 Context mContext; 
    public CheckBeerJSON(Context context) 
    { 
     mContext = context; 
    } 

Для infalte раскладки вам нужно LayoutInflater.

LayoutInflater mInflater = (LayoutInflater)mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

Также

LinearLayout addButton = (LinearLayout)((Activity) mContext).findViewById(R.id.addBeerLayout); 
    addButton.addView(mInflater.inflate(R.layout.addbeerbutton_layout, null)); 

сделать Кроме того, что вы не обновлять пользовательский интерфейс в doInbackground.

+0

Спасибо, что это сработало! Я должен быть в состоянии выяснить остальное отсюда! – Mike

1

У меня нет компьютера здесь, поэтому я не могу опубликовать пример, но, возможно, намека достаточно.

viewstub может быть хорошим выбором, если я правильно понял, чего вы пытаетесь достичь.

http://developer.android.com/reference/android/view/ViewStub.html

0

Как я сделать это в моих приложениях выглядит следующим образом.

LayoutInflater mLayoutInflater = (LayoutInflater) 
    getSystemService(LAYOUT_INFLATER_SERVICE); 

//Layout defined in XML 
LinearLayout mLinearLayout = (LinearLayout) 
    findViewById(R.id.layout); 

//View to add to XML layout 
View mView = mLayoutInflater.inflate(R.layout.view, 
    mLinearLayout, false); 

mLinearLayout.addView(mView); 
+0

layout_inflater_service дает мне эту ошибку: LAYOUT_INFLATER_SERVICE не может быть решен с переменной – Mike

+0

ARE YOU используя это во Фрагменте? Это ошибка Eclipse? –

+0

Ошибка eclipse, а не фрагмент. – Mike