Android 在安卓系统中,当点击不同的字母和相应的数据时,如何刷新水平布局

Android 在安卓系统中,当点击不同的字母和相应的数据时,如何刷新水平布局,android,layout,horizontal-scrolling,Android,Layout,Horizontal Scrolling,注意:我想我的问题是:如果第一次单击任何字母,它会在水平视图上加载数据,但如果第二次单击下一个字母,则尝试在前一个视图中添加数据项,以便 java.lang.IllegalStateException: HorizontalScrollView can host only one direct child at android.widget.HorizontalScrollView.addView(HorizontalScrollView.java:213) 我尝试了很多次,但每次单击不同的字

注意:我想我的问题是:如果第一次单击任何字母,它会在水平视图上加载数据,但如果第二次单击下一个字母,则尝试在前一个视图中添加数据项,以便

java.lang.IllegalStateException: HorizontalScrollView can host only one direct child
at android.widget.HorizontalScrollView.addView(HorizontalScrollView.java:213)
我尝试了很多次,但每次单击不同的字母时都无法删除旧数据视图和新数据视图。

我在文本视图中有一个to Z字母,就像标签一样

A B C D........X Y Z.

horizontalview with no data if no select
如果我单击或选择一个,则。 在水平视图中显示相关数据。以圆形为背景

  A B C.......X Y Z
  Apple     Aeroplane   Argo
  5 kg      100         9        and many more
  A B C.......X Y Z
  Duck       Dog  
  5 kg       12      and many more
如果我单击或选择D,则。 在水平视图中显示相关数据。以圆形为背景

  A B C.......X Y Z
  Apple     Aeroplane   Argo
  5 kg      100         9        and many more
  A B C.......X Y Z
  Duck       Dog  
  5 kg       12      and many more
但无法显示这样的时间,当单击D时,如果发生错误

01-12 16:21:19.031: E/AndroidRuntime(16246): java.lang.IllegalStateException: HorizontalScrollView can host only one direct child
01-12 16:21:19.031: E/AndroidRuntime(16246):    at android.widget.HorizontalScrollView.addView(HorizontalScrollView.java:213)
我在代码中做了什么,请你给我一些建议

  for (int j = 0; j < letters.length; j++) {
        btnTag = new PlanTextView(mContext);
        btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,
                LayoutParams.WRAP_CONTENT));
        btnTag.setText(letters[j].toString());
        btnTag.setPadding(6, 6, 6, 6);
        btnTag.setTextSize(20);
        btnTag.setId(j + 1);
        listBtnTag.add(btnTag);
        final int index = j;
   btnTag.setOnClickListener(new OnClickListener() {
                private boolean stateChanged = true;
                private boolean flag;
                private LinearLayout yelloDetailsLinearLayout1;
                private LinearLayout innerYello1;

                @SuppressLint("NewApi")
                public void onClick(View v) {
                     yelloDetailsLinearLayout1 = new LinearLayout(mContext);
                    // letterLinear.setPadding(5, 5, 5, 5);
                    yelloDetailsLinearLayout1.setOrientation(LinearLayout.HORIZONTAL);
                    yelloDetailsLinearLayout1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                     innerYello1 = new LinearLayout(mContext);
                    // letterLinear.setPadding(5, 5, 5, 5);
                    innerYello1.setOrientation(LinearLayout.HORIZONTAL);
                    innerYello1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));


                    // displayYello(btnTag.getText().toString());

                    List<String> sorted = new ArrayList<String>();
                    sorted = SortedList(listBtnTag.get(index).getText()
                            .toString(), yellonameList);
                    if (sorted.size() == 0) {
                        Toast.makeText(mContext, "No Yello Page Found",
                                Toast.LENGTH_SHORT).show();
                    } else {


                        for (int i = 0; i < sorted.size(); i++) {

                            LinearLayout rowletter1 = new LinearLayout(mContext);
                            rowletter1.setOrientation(LinearLayout.VERTICAL);
                            rowletter1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
                            rowletter1.setPadding(10, 0, 0, 0);

                            tvde = new TextView(mContext);
                            tvde.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

                            btnNumber = new Button(mContext);
                            btnNumber.setLayoutParams(new LayoutParams( LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT));

                            String[] spits = sorted.get(i).toString().split("\\,");
                            tvde.setText("Your Selected=" + spits[0].toString());

                            btnNumber.setText(spits[1].toString());
                            rowletter1.addView(tvde);
                            rowletter1.addView(btnNumber);
                            innerYello1.addView(rowletter1);
                            flag=true;
                        }
                        yelloDetailsLinearLayout1.addView(innerYello1);
                        horizontalScrollview.addView(yelloDetailsLinearLayout1);
                    }
                    for (int i = 0; i < listBtnTag.size(); i++) {
                        if (v.getId() == index) {
                            // reset background to default;
                            listBtnTag.get(index).setBackgroundResource(
                                    R.drawable.circel_off);
                        } else {
                            listBtnTag.get(index).setBackgroundResource(
                                    R.drawable.circel_on);
                        }
                        stateChanged = !stateChanged;
                    }

                }
            });
            rowletter.addView(btnTag);

        }
for(int j=0;j
您想要实现的功能可以通过更简单的方式实现。我的解决方案假设上面的按钮数量始终为A到Z,并且您必须显示的数据始终具有相同的格式。 创建如下xml文件,而不是子类化
LinearLayout

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >

    <HorizontalScrollView
        android:id="@+id/horizontal_scrollview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="50dp"
        android:alignParentTop="true" >

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

            <Button
                android:id="@+id/a_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/a" /> <!-- declare a as A in string.xml -->

            <Button
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/b" /> 

            <!-- do this till Z -->

        </LinearLayout>
    </HorizontalScrollView>



    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@id/horizontal_scrollview"
        android:layout_alignParentBottom="true">

      <!-- your layout to show data here. Showing a sample value for reference -->
       <TextView
           android:id="@+id/ursel_textview"
           android:layout_width="wrap_content"
           android:layout_height="wrap_content"
           android:text="@string/your_selected"/> <!-- declare your_selected as Your selected in string.xml -->

    </RelativeLayout>
</RelativeLayout> 
创建26个这样的侦听器,并根据单击的按钮将适当的数据设置为urSelTextView。您还可以让活动实现
OnClickListener
,并将所有代码写入由活动实现的一个公共
onClick
函数中。我还没有测试这段代码。它可能需要一些改进。但总的来说,你应该从中得到灵感

编辑:以下是根据您的要求修改的代码。我还没试过,但我觉得应该行得通

在类中,将yelloDetailsLinearLayout1存储为成员变量

public class YourClass extends Activity {

private LinearLayout mYelloDetailsLinearLayout; //stores the currently added layout



//later in your code

for (int j = 0; j < letters.length; j++) {
    btnTag = new PlanTextView(mContext); 
    btnTag.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, 
            LayoutParams.WRAP_CONTENT)); 
    btnTag.setText(letters[j].toString());
    btnTag.setPadding(6, 6, 6, 6); 
    btnTag.setTextSize(20); 
    btnTag.setId(j + 1);
    listBtnTag.add(btnTag); 
    final int index = j;
    btnTag.setOnClickListener(new OnClickListener() { 
            private boolean stateChanged = true;
            private boolean flag;
            private LinearLayout yelloDetailsLinearLayout1;
            private LinearLayout innerYello1;

            @SuppressLint("NewApi") 
            public void onClick(View v) {



                 yelloDetailsLinearLayout1 = new LinearLayout(mContext);
                // letterLinear.setPadding(5, 5, 5, 5); 
                yelloDetailsLinearLayout1.setOrientation(LinearLayout.HORIZONTAL);
                yelloDetailsLinearLayout1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
                 innerYello1 = new LinearLayout(mContext);
                // letterLinear.setPadding(5, 5, 5, 5); 
                innerYello1.setOrientation(LinearLayout.HORIZONTAL);
                innerYello1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT));


                // displayYello(btnTag.getText().toString()); 

                List<String> sorted = new ArrayList<String>();
                sorted = SortedList(listBtnTag.get(index).getText()
                        .toString(), yellonameList); 
                if (sorted.size() == 0) {
                    Toast.makeText(mContext, "No Yello Page Found",
                            Toast.LENGTH_SHORT).show();
                } else { 


                    for (int i = 0; i < sorted.size(); i++) {

                        LinearLayout rowletter1 = new LinearLayout(mContext);
                        rowletter1.setOrientation(LinearLayout.VERTICAL);
                        rowletter1.setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,LayoutParams.WRAP_CONTENT));
                        rowletter1.setPadding(10, 0, 0, 0);

                        tvde = new TextView(mContext);
                        tvde.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 

                        btnNumber = new Button(mContext);
                        btnNumber.setLayoutParams(new LayoutParams( LayoutParams.WRAP_CONTENT,LayoutParams.WRAP_CONTENT)); 

                        String[] spits = sorted.get(i).toString().split("\\,");
                        tvde.setText("Your Selected=" + spits[0].toString());

                        btnNumber.setText(spits[1].toString());
                        rowletter1.addView(tvde);
                        rowletter1.addView(btnNumber);
                        innerYello1.addView(rowletter1);
                        flag=true;
                    } 
                    yelloDetailsLinearLayout1.addView(innerYello1);


                    /*********** remove the previously added mYelloDetailsLinearLayout here******/
                    horizontalScrollView.removeView(mYelloDetailsLinearLayout);



                    /*********** add the newly created mYelloDetailsLinearLayout here******/
                    mYelloDetailsLinearLayout = yelloDetailsLinearLayout1;
                    horizontalScrollview.addView(mYelloDetailsLinearLayout);
                } 
                for (int i = 0; i < listBtnTag.size(); i++) {
                    if (v.getId() == index) {
                        // reset background to default; 
                        listBtnTag.get(index).setBackgroundResource(
                                R.drawable.circel_off);
                    } else { 
                        listBtnTag.get(index).setBackgroundResource(
                                R.drawable.circel_on);
                    } 
                    stateChanged = !stateChanged;
                } 

            } 
        }); 
        rowletter.addView(btnTag); 

    } 
公共类YourClass扩展活动{
private LinearLayout mYelloDetailsLinearLayout;//存储当前添加的布局
//稍后在代码中
对于(int j=0;j