0

我正在尝试ListView在我的应用程序上实现 a,但我正在尝试理解和学习如何在不使用 XML 文件的情况下实现它,所有这些都使用 java 代码。

我被困在充气机部分,该mInflater.inflate();功能需要一个资源 xml 文件,所以,我不明白如何在不使用 XML 文件的情况下继续

我有一个ArrayList字符串,我只需要一个ListView显示包含这些字符串的列表的列表Arraylist,并ButtonString. 如果用户按下Button,获取的项目将List被删除。

的每一项ListView都有两件事,一个是TextView用的StringArrayList一个Button是删除它。

如果有人能给我代码示例,我将不胜感激。

谢谢

4

1 回答 1

1

我完全同意 CommonsWare。但是您被卡住的部分是您必须为行创建行“模板”的部分ListViewinflater用于制作View一个完整文件的单个layout.xml文件。所以基本的想法是你创建一个代表每一行的xml,然后通过那段代码对其进行扩充。

在您的情况下,您需要通过代码来做到这一点。也许添加 aLinearLayout作为具有方向=垂直的父级添加一些宽度或高度属性,然后添加 2TextView以便成为具有一些附加属性的标题和副标题。然后你应该把它们添加到LinearLayout你那里。

LinearLayout是一堆View动态创建的s,效果和把上面所有的代码通过一个xml文件膨胀一样。

但我真的不明白在更快、更容易、更直接、更好实施,更不用说最佳实践上大惊小怪了……

编辑:您在适配器内部的某个地方:mInflater.inflate();使用您提到的资源。正如我之前所说,资源决定了每一行的“模板”如何。因此,将确定列表行的普通 xml 文件将是这样的:

<LinearLayout android:layout_width="fill_parent"
   android:layout_height="wrap_content" android:orientation="vertical" >
   <TextView ... /> <! --some properties you want to set -->
   <TextView ... /> <! --some properties you want to set -->
</LinearLayout>

此 xml 为 a 生成 2 行列表行ListView。使用布局充气器,上面的 xml 文件返回一个View包含所有包的对象。

因此,如果您想从代码创建它,那么代码段将是:

LinearLayout layout = new LinearLayout(context);
//layout set some properties
TextView title = new TextView(context);
//title set some properties
TextView subtitle = new TextView(context);
//subtitle set some properties
layout.add(title);
layout.add(subtitle);

现在不是膨胀 xml 以将内容放入单个View对象中,而是layout代码片段中的变量包含以前通过 xml 膨胀的所有逻辑。

如果您之前创建了自定义ListView适配器,那么您应该熟悉创建自定义列表行及其工作原理。

编辑:适配器的示例代码ListView

这是getView()通过扩展单个布局的适配器方法的标准过程:

@Override
public View getView(int position, View view, ViewGroup viewgroup) {
ViewHolder holder; //our view holder of the row
if (view == null) {
   view = context.getLayoutInflater().inflate(R.layout.static_layout, null);
   holder = new ViewHolder();
   //set the views of the holder
       view.setTag(holder);
} else {
   holder = (ViewHolder) view.getTag();
}
    //rest of implementation of the View
    return view;
}

动态实现:

@Override
public View getView(int position, View view, ViewGroup viewgroup) {
ViewHolder holder; //our view holder of the row
if (view == null) {
       LinearLayout layout = new LinearLayout(context);
       //layout set some properties
       TextView title = new TextView(context);
       //title set some properties
       TextView subtitle = new TextView(context);
       //subtitle set some properties
       layout.add(title);
       layout.add(subtitle);
   //CREATING THE LAYOUT THROUGH CODE

       view = layout; //INSTEAD OF INFLATING A LAYOUT FOR THE ROW I JUST BINDED IT TO THE RECENTLY CREATED LAYOUT 
   holder = new ViewHolder();
   //bind the views of the holder to the views of the layout
       view.setTag(holder);
} else {
   holder = (ViewHolder) view.getTag();
}
    //rest of implementation of the View
    return view;
}
于 2012-07-24T23:20:30.953 回答