如何实现在动态布局中添加更多视图在android中实现滚动视图

Posted

技术标签:

【中文标题】如何实现在动态布局中添加更多视图在android中实现滚动视图【英文标题】:how can implemented adding more views in dynamic layout implementing scrollview in android 【发布时间】:2011-04-08 16:29:45 【问题描述】:

我正在实现自定义线性布局,在此添加更多视图检索数据库在后台过程中使用 web 服务所有数据都是检索消息和消息相关的用户图像也首先在自定义线性布局中逐个加载图像后初始加载消息

main.xml

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout android:id="@+id/frameLayout1" android:layout_ android:background="@android:color/white"
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_>
    <ScrollView android:id="@+id/scrollView1" android:layout_ android:layout_>
        <LinearLayout android:layout_ android:id="@+id/linearLayout2" android:layout_>
            <LinearLayout android:layout_ android:id="@+id/linearLayout3" android:layout_>
                <ImageView android:id="@+id/person" android:layout_ android:layout_></ImageView>
                <TextView android:textColor="@android:color/black" android:id="@+id/textView1" android:layout_ android:layout_></TextView>
            </LinearLayout>
        </LinearLayout>
    </ScrollView>
</FrameLayout>

代码文件:

public class MYlist extends Activity 

    /** Called when the activity is first created. */
    List<MessageClass> messages;
    int i=0,n=5;
     ParseXMLString parse=new ParseXMLString();
     DataParsingComm dataparsing=new DataParsingComm();
    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        String xml="<spGetUserMessages><SearchLocation></SearchLocation><LoginUserID>125</LoginUserID></spGetUserMessages>";
        messages =parse.GetGetUserMessages(dataparsing.ILGetUserMessages(xml));


        addElements(messages,i,n);
    

    protected void addElements(final List<MessageClass> messages2,int i,int n) 
    
        int k=0;
     //((LinearLayout)findViewById(R.id.linearLayout1)).removeAllViews();

        for(int i1=i;i1<n;i1++)
        
            LinearLayout ll1=((LinearLayout)findViewById(R.id.linearLayout2));
            ll1.setBackgroundResource(R.drawable.tabmessage);
            Log.v("11111111","333"+ i1+ n);
          if(k==i1)
          
            for(int j1=i1;j1<n;j1++)
            

            TextView msg=((TextView)findViewById(R.id.textView1));
            msg.setText(messages2.get(j1).getmessage());

            
          
            ImageView prsnImg=((ImageView)findViewById(R.id.person));
        try
            String photoXml="<spGetUserPhoto><UserID>125</UserID></spGetUserPhoto>";

            String photoInfoFromDB=new DataParsingComm().ILGetImage(photoXml);

            if(photoInfoFromDB.equalsIgnoreCase("anyType")||photoInfoFromDB.equals(null) )
            
                prsnImg.setImageResource(R.drawable.person);
            
            else

                byte[] imgArry= Base64.decode(photoInfoFromDB);

                Bitmap bit=BitmapFactory.decodeByteArray(imgArry,0,imgArry.length);

                prsnImg.setImageBitmap(bit);
            
        catch (Exception e) 
            e.printStackTrace();
        
        finally
            
                System.gc();
                System.runFinalization();
            

        

    

截图:http://www.freeimagehosting.net/uploads/8437c22cca.png

我的问题是每次显示一个项目所有数据都会覆盖布局中的单个项目视图如何在线性布局中一一实现显示视图

请告诉我一些解决方案提前谢谢

【问题讨论】:

【参考方案1】:

那是因为你总是选择相同的两个对象...

有一种非常基本的方法可以获得我认为你可能想要的东西:

main.xml

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/frameLayout1" 
    android:layout_ 
    android:background="@android:color/white" 
    android:layout_>
    <ScrollView android:id="@+id/scrollView1" 
        android:layout_ 
        android:layout_>

    </ScrollView>
</FrameLayout>

.java

public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        ScrollView scrollView = (ScrollView) findViewById(R.id.scrollView1);

        LinearLayout topLinearLayout = new LinearLayout(this);
        topLinearLayout.setOrientation(LinearLayout.VERTICAL); 

        for (int i = 0; i < 15; i++)

            LinearLayout linearLayout = new LinearLayout(this);
            linearLayout.setOrientation(LinearLayout.HORIZONTAL); 

            ImageView imageView = new ImageView (this);
            TextView textView = new TextView (this);

            imageView.setImageResource(R.drawable.image);
            textView.setText("Text View #" + i);

            linearLayout.addView(imageView);
            linearLayout.addView(textView);

            topLinearLayout.addView(linearLayout);          

        

        scrollView.addView(topLinearLayout);

    

您还可以在 xml 文件中定义 topLinearLayout 对象。这取决于你。

【讨论】:

我用一些你觉得有用的基本代码更新了我的答案。

以上是关于如何实现在动态布局中添加更多视图在android中实现滚动视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在 recyclerview 适配器中将动态视图添加到 android 布局

Android:创建自定义视图并将其动态添加到布局中

iOS 如何使用两个固定部分和一个动态表格视图进行布局?

如何避免在android中的relativelayout中重叠视图

如何在 android 中实用地添加和删除布局?

动态添加视图并设置参数和规则无法正常工作(android)