2013-06-23 3 views
0

사용자가 데이터베이스에 무언가를 가지고 있지 않으면 버튼을로드하려는 기본 페이지 xml이 있습니다.inflator로 안드로이드에 xml을 동적으로 추가하려고 시도했습니다.

내 메인 페이지의 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 파일을 팽창을 시도하고

<?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> 

:

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

내 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으로 충돌이 발생합니까? 당신이 LAYOUT_INFLATER_SERVICE 변수 – Blackbelt

+0

내가 두 번째 올바른 클래스, 당신이 문맥을 필요로하는 첫 번째 오류에 대한 내 주요 포스트 – Mike

+4

에 무엇입니까 두 개의 오류를 추가 – Blackbelt

답변

1

의견을 작성하십시오. CheckBeerJSON은 Aynstask입니다. 따라서 블랙 벨트가 제안한 컨텍스트가 필요합니다. 활동 컨텍스트를 asynctask의 생성자에 전달하십시오. 활동 클래스 AsyncTask를의 생성자에서 다음

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

에서

.

 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에 UI를 업데이트하지 않습니다 있는지 확인하십시오.

+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 날이 오류를 제공 LayoutInflater에서입니다 이것을 단편에서 사용합니까? 이것은 Eclipse 오류입니까? – Mike

+0

에 해결 될 수없는 위치 : –

+0

조각에 포함되지 않은 일식 오류입니다. – Mike