在 Android 中,我有一个 Section 的 ArrayList(有一个 Section 类,所以它不仅仅是一个字符串的 ArrayList)。我想将每个部分表示为一个按钮。目前,我通过遍历每个 Section、膨胀 section.xml,然后动态添加随每个特定 Section 变化的属性来实现这一点:
SectionsActivity.java:
public class SectionsActivity extends Activity {
private int numSections;
LayoutInflater inflater;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.sections);
numSections = App.Sections.getSectionList().size();
inflater = getLayoutInflater();
LinearLayout ll = (LinearLayout) findViewById(R.id.ll);
for (int i = 0; i < numSections; i++) {
ll.addView(getSectionButton(App.Sections.getSectionList().get(i)));
}
}
public Button getSectionButton(Section s) {
Button b = (Button) inflater.inflate(R.layout.section, null);
b.setHint("section" + s.getSectionId());
b.setText(s.getName());
b.setTextColor(Color.parseColor("#"+s.getColor()));
return b;
}
}
Sections.java:
public class Sections {
private ArrayList<Section> SectionList;
public ArrayList<Section> getSectionList() {
return SectionList;
}
public void setSectionList(ArrayList<Section> sectionList) {
SectionList = sectionList;
}
}
节.java:
public class Section {
private String Color;
private String Name;
private int SectionId;
//constructor, standard getters and setters
}
节.xml:
<?xml version="1.0" encoding="utf-8"?>
<Button
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textStyle="bold" />
这很好用,但我觉得可能有更好的解决方案。这是用于 Windows Phone 7 的 .NET 中的示例:您告诉 XAML 您想要绑定什么(SectionList,它是一个ObservableCollection),然后为它提供一个模板,说明集合中的每个项目应如何表示。
<StackPanel Name="StackPanelSection">
<ListBox Name="ListBoxSection" ItemsSource="{Binding SectionList}" ScrollViewer.VerticalScrollBarVisibility="Disabled">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Name, Converter={StaticResource StringToLowercaseConverter}}" FontFamily="Segoe WP SemiLight" FontSize="48" Foreground="{Binding HTMLColor}" Tap="TextBlockSection_Tap" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</StackPanel>
这样更好,既简单又方便,如果您更改 SectionList 的内容,UI 会自动更新。我已经阅读了足够多的关于 Android 中的数据绑定的内容,知道可能没有真正的等价物,但是完成相同任务的最佳方法是什么?有吗?即使数据绑定在这里不是一个好的解决方案,我应该以不同的方式构建我的 Android 代码吗?