我遇到了我的第一个Android应用程序问题。我要做的是制作一个动态HorizontalScrollView
,其内容将来自可随时间变化的列表(如范围内的设备列表或类似内容)。
问题是当列表变空时它不起作用。之后,视图显示消失前的一个项目。当项目出现在列表中时,它可以正常工作。当在列表中添加或删除元素时,将调用以下方法。
也许我错过了一些非常基本的东西。我希望列表变空时列表为空
我会很感激解决方案的一些提示(以及一些批评,如果代码是androidwise可怕的话)
protected void updateSlideMenu() {
HorizontalScrollView slideMenu = (HorizontalScrollView) findViewById(R.id.scrollView);
ArrayList<String> list = new ArrayList<>();
/*
* ...
* Here's some code that gets data into list
*/
LinearLayout ll = new LinearLayout(this);
ll.removeAllViews();
ll.setOrientation(LinearLayout.HORIZONTAL);
if(slideMenu == null) {
Log.d("slideMenu is null in", "updateSlideMenu");
return;
}
slideMenu.removeAllViews();
slideMenu.addView(ll);
for (String str: list) {
Button b = new Button(this);
b.setText(str);
b.setOnClickListener(/*...*/);
ll.addView(b);
}
slideMenu.refreshDrawableState();
}
答案 0 :(得分:1)
您需要使用适配器
Var2 Value
Var1
A A 34
B B 23
C C 77
D Q 100
E N 102
F P 44
>>>
添加按钮后,请调用此方法
ArrayAdapter<Button> buttons =new ArrayAdapter<Button>
//add buttons to this variable
l1.setAdaptor(buttons);
答案 1 :(得分:0)
你可以这样做:
<强> activity_main.xml中强>
<HorizontalScrollView
android:id="@+id/scrollView"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<LinearLayout
android:id="@+id/llParent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
</LinearLayout>
</HorizontalScrollView>
<强> MainActivity.java 强>
public class MainActivity extends AppCompatActivity {
private final String TAG = MainActivity.class.getSimpleName();
private LinearLayout llParent;
private HorizontalScrollView slideMenu;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
slideMenu = (HorizontalScrollView) findViewById(R.id.scrollView);
llParent = (LinearLayout) findViewById(R.id.llParent);
}
protected void updateSlideMenu() {
ArrayList<String> list = new ArrayList<>();
/*
* ...
* Here's some code that gets data into list
*/
llParent.removeAllViews();
if(slideMenu == null) {
Log.d("slideMenu is null in", "updateSlideMenu");
return;
}
for (String str: list) {
Button b = new Button(this);
b.setText(str);
b.setOnClickListener(/*...*/);
llParent.addView(b);
}
slideMenu.refreshDrawableState();
}
}
在您想要更新水平滚动视图的位置调用 updateSlideMenu 方法。
希望这会对你有所帮助。
答案 2 :(得分:0)
我建议使用RecyclerView
作为这类任务的优点,它使它变得非常简单。您可以在https://developer.android.com/training/material/lists-cards.html
使用LinearLayout的方法很糟糕,因为它没有回收视图。这意味着如果你有20个项目,但你只显示5个,其余的15个将坐在那里浪费你的记忆,同时RecyclerView
将重用视图并管理内存