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