繁体   English   中英

如何在Android中为列表视图的单行管理多个布局?

[英]How to manage multiple layouts for single row of List View in Android?

我有一种情况。我正在做聊天应用程序,因为我有一个发送方和一个接收方。 所有的聊天都显示在列表视图的各个行中。在获取视图中,假设我有5个发件人消息和5个接收者消息(包括图像)我将如何处理此情况。对于发送方,我有一个布局(我使用支架充气)视图模式),其中包含进度条以显示状态图像上传,另一方面,我正在给另一种布局充气,但我没有任何进度条。在这种情况下,回收利用的原理是指最后一项(在屏幕上可见的第十项) )是属于接收方的图像,没有进度条,但是第11个项目的滚动滚动工作并且第11个项目是从发件人一侧滚动并且包含进度条之后。系统消息还有第三个布局(显示今天,昨天的状态),并且这第三批仅具有单个文本视图,当包含该图像的项目被回收时会发生什么(当此布局没有任何图像视图时)我应该对所有这些使用单行并显示/隐藏可折叠的数据或有没有更好的应用 有蟑螂吗?

您可以在模型类中创建类型字段,并仅根据此类型为View充气。

您的getView方法将如下所示:

           if (convertView == null) {
                if (model.getType() == 0) {
                    convertView = mInflater.inflate(R.layout.row_sent_message,
                            null);
                } else if (model.getView() == 1) {
                    convertView = mInflater.inflate(R.layout.row_sent_message,
                            null);
                } else if (model.getView() == 2) {
                    convertView = mInflater.inflate(R.layout.row_other, null);
                }
                holder = new ViewHolder(convertView);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }

您的ViewHolder类应如下所示:

private class ViewHolder {


        public ViewHolder(View rowView, int rowType) {
            // TODO Auto-generated constructor stub

            // According to your rowType find id of your view here 

        }
    }

您需要使用

getViewTypeCount()-返回将由getView(int,View,ViewGroup)创建的View的类型数。

getItemViewType(int position)-获取将由getView(int,View,ViewGroup)为指定项目创建的View的类型。

@Override
public int getItemViewType(int pos) {
    return pos % 2;
}

@Override
public int getViewTypeCount() {
    return 2; 
}

然后更新getView以处理2种布局

public View getView(int pos, View convertView, ViewGroup parent) {
    ..............................................................
    ..............................................................
    if (convertView == null) {
        inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
        if (getItemViewType(pos) == 0) {
            convertView = inflater.inflate(R.layout.layout_type_one, null);
        } else {
            convertView = inflater.inflate(R.layout.layout_type_two, null);
        }
        ..............................................................
        ..............................................................

    }
    ...................................................................
    ...................................................................
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM