0

我一直在周围,我已经看到重复的布局示例。我什至尝试了一些但无济于事。大多数都没有提供我在下面要完成的工作的真实表示。我确实遇到了一个似乎可以工作但导致错误的方法,因为我试图将 .add 用于父布局而 android 不喜欢它。我需要动态布局,这样我就可以在每个重复的项目上使用不同的细节,而不会覆盖以前的细节。

下面是重复布局的 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--;
        }   
    }
}

感谢您提供任何帮助,这是一个很大的障碍,我花了很多时间试图弄清楚为什么会这样。

错误代码是之前的。错误是在 postexecute() 期间尝试添加元素时

03-21 21:27:44.245: W/dalvikvm(30172): threadid=1: 线程退出未捕获异常 (group=0x40020ac0) 03-21 21:27:44.255: E/AndroidRuntime(30172): 致命异常: main 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): 在 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。

谢谢

4

1 回答 1

1

所以我找到了我的问题的答案。当我第一次开始使用它时,我已经接近解决方案了。这使我还可以定位正在创建的每个项目,以便在创建它们时对其进行更新。

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--;
        }   
    }
}
于 2013-03-25T02:40:49.580 回答