2013-03-21 1 views
0

저는 주변에 있었고 레이아웃 예제를 반복 해 보았습니다. 심지어 몇 가지 시도했지만 아무 소용이있어. 대부분 내가 아래에서 성취하고자하는 것을 실제로 표현한 것은 아닙니다. 부모 레이아웃에 .add를 사용하려고했기 때문에 작동하지 않는 것으로 보이는 오류가 발생했습니다. android는 그것을 좋아하지 않았습니다. 레이아웃이 동적이어야하므로 이전 항목을 덮어 쓰지 않고 반복되는 각 항목에 다른 세부 정보를 사용할 수 있습니다.백그라운드에서 do를 사용하는 동안 프로그래밍 방식으로 자세한 레이아웃을 반복적으로 작성하십시오.

다음은 반복 레이아웃을위한 XML입니다.이 레이아웃은 다른 레이아웃으로되어 있으며, 나는 그것에 대해 팔리지 않아, 더 좋은 방법이 있다면 알고 싶습니다. 내 구조가 약간 과부하가 걸릴 것이라고 확신하지만, 현재로서는 걱정하지 않습니다.

<?xml version="1.0" encoding="utf-8"?> 

      <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:layout_gravity="center_horizontal" 
       android:layout_marginBottom="5dp" 
       android:layout_marginRight="5dp" 
       android:background="@drawable/shop_item_banner" 
       android:orientation="horizontal" 
       android:padding="10dp" > 

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

        <ImageView 
         android:id="@+id/ImageView01" 
         android:layout_width="55dp" 
         android:layout_height="55dp" 
         android:background="@drawable/shop_back_missing_image" /> 


        <LinearLayout 
         android:layout_width="wrap_content" 
         android:layout_height="wrap_content" 
         android:layout_weight="0.83" 
         android:orientation="vertical" 
         android:paddingLeft="5dp" > 

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

          <TextView 
           android:id="@+id/textView1" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:text="TextView" /> 
          <TextView 
           android:id="@+id/textView3" 
           android:layout_width="wrap_content" 
           android:layout_height="wrap_content" 
           android:text="TextView" /> 

         </LinearLayout> 

         <TextView 
          android:id="@+id/textView2" 
          android:layout_width="wrap_content" 
          android:layout_height="wrap_content" 
          android:text="TextView" /> 
        </LinearLayout> 

        <ImageView 
         android:id="@+id/imageView1" 
         android:layout_width="wrap_content" 
         android:layout_height="fill_parent" 
         android:src="@drawable/shop_divider_section" /> 

        <Button 
         android:id="@+id/button2" 
         android:layout_width="50dp" 
         android:layout_height="wrap_content" 
         android:layout_marginLeft="5dp" 
         android:background="@drawable/shop_big_button" 
         android:text="BUY" 
         android:typeface="normal" /> 


       </LinearLayout> 

      </LinearLayout> 

다음은 페이지의 구조를 업데이트하는 코드입니다. 사용자가 스크롤 할 수 있도록 ScrollView 내부에있는 LinearLayout을 업데이트합니다. 내 문제를 디버그 할 수 있도록 코드를 줄이기 시작했습니다. 지금까지 레이아웃을 세 번 인쇄하기 위해 while 루프를 사용했습니다. 일단 잘 작동하지만 일단 두 번 이상 실행하면 앱이 실패하고 앱이 닫힙니다. 선택한 레이아웃에 항목을 더 이상 추가 할 수 없다는 경고가 나타납니다.

어떤 도움이 감사
public class LayoutStream extends AsyncTask<String, String, String>{ 

    String data = null; 
    LinearLayout layoutList = (LinearLayout)findViewById(R.id.ScrollItem); 

    protected void onPreExecute(){ 

    } 

    @Override 
    protected String doInBackground(String... params) {   
     return data; 
    } 

    protected void onPostExecute(String tpresult){ 
     int run = 5; 
     View storeitems = getLayoutInflater().inflate(R.layout.shop_item, null); 
     while (run > 3){ 

      layoutList.addView(storeitems); 
      run--; 
     } 
    } 
} 

이 큰 장애물이었다이이 방법을 수행하는 이유를 알아 내려고 많은 시간을 보냈다.

오류 코드는 이전입니다. 27 : 44.245 : dalvikvm/W (30,172)이 오류는 postexecute()

03-21 (21) 중 한 요소를 추가 할 때 1 = threadid : 스레드 캐치되지 않는 예외 (그룹 = 0x40020ac0) 03 출사 -21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : 치명적인 예외 : 주 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : java.lang.IllegalStateException : 지정된 자식에 이미 부모가 있습니다. 먼저 부모의 부모에 대해 removeView()를 호출해야합니다. 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : android.view.ViewGroup.addViewInner (ViewGroup.java:1970) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : at android.view.ViewGroup.addView (ViewGroup.java:1865) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : android.view.ViewGroup.addView (ViewGroup.java:1822) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : android.view.ViewGroup.addView (ViewGroup.java:1802) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : com.example. myapp.app.myshop $ TokenStream.onPostExecute (myshop.java:188) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : com.example.myapp.app.myshop $ TokenStream.onPostExecute (myshop. java : 1) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : android.os.AsyncTask.finish (AsyncTask.java:417) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : android.os.AsyncTask.access $ 300 (AsyncTask.java:127) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : android.os .AsyncTask $ InternalHandler.handleMessage (AsyncTask.java:429) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : android.os.Handler.dispatchMessage (Handler.java:99) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : android.os.Looper.loop (Looper.java:123) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : android.app.ActivityThread .main (ActivityThread.java:4627) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : java.lang.reflect.Method.invokeNative (기본 메소드) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : java.lang.reflect.Method.invoke (Method.java:521) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : com.android.internal.o에서 s.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:885) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : com.android.internal.os.ZygoteInit.main (ZygoteInit.자바 : 643) 03-21 21 : 27 : 44.255 : E/AndroidRuntime (30172) : dalvik.system.NativeStart.main (기본 방법)에

감사

+0

오류 무엇입니까? 오류 로그 게시 이후 –

+0

오늘 오후에 직장을 벗어날 예정입니다. 오류 로그를 얻을 시간이 없었습니다. – TheHamstring

답변

0

그래서 나는 내 문제에 대한 답변을 찾을 . 내가 처음 시작했을 때 나는 그 해결책에 가까웠다. 이렇게하면 작성중인 각 항목을 대상으로하여 해당 항목이 작성 될 때 업데이트 할 수 있습니다.

public class LayoutStream extends AsyncTask<String, String, String>{ 

    String data = null; 
    LinearLayout layoutList = (LinearLayout)findViewById(R.id.ScrollItem); 

    protected void onPreExecute(){ 

    } 

    @Override 
    protected String doInBackground(String... params) {   
     return data; 
    } 

    protected void onPostExecute(String tpresult){ 
     int run = 5; 
     LinearLayout layoutList = (LinearLayout)findViewById(R.id.ScrollItem); 
     LayoutInflater IInflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); 

     while (run >= 1){ 

      View storeitems = IInflater.inflate(R.layout.shop_item, null); 
      layoutList.addView(storeitems, 0); 
      run--; 
     } 
    } 
}