android - 动态更改 ListView 的行布局

标签 android listview layout

我正在开发一个应用程序中的聊天模块,我希望两个参与者的消息以相反的对齐方式(其他用户左对齐,我自己的消息右对齐)。现在,我的行布局通过静态布局 xml 传入(消息和头像左对齐)。有没有办法动态修改 View ,或者有没有办法传递替代行布局供 UI 系统在运行时选择?

最佳答案

您可以在 ArrayAdapter 类的 getView() 方法中执行此操作(假设您正在定义自己的 ArrayAdapter)。

你可以有这样的东西:

private class YourAdapter extends ArrayAdapter<Message> {
        private final LayoutInflater mLayoutInflater;

    YourAdapter(YourListActivity activity) {
        super(mContext, 0);
        mLayoutInflater = LayoutInflater.from(activity);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            // Inflate your view
            convertView = mLayoutInflater.inflate(R.layout.list_view_item, parent, false);
            mViewHolder = new ViewHolder();
            mViewHolder.avatar = (ImageView) convertView.findViewById(R.id.placeholder);
            mViewHolder.message = (TextView) convertView.findViewById(R.id.message);

            convertView.setTag(mViewHolder);
        } else {
            mViewHolder = (ViewHolder) convertView.getTag();
        }

        final Message message = getItem(position);

        mViewHolder.message.setText(message.getMessage());
        // etc. Manipulate your views as you wish


        return convertView;
    }
}


   private static class ViewHolder {
        TextView message;
        ImageView avatar;
   }

getView 将在您每次修改 ListView 时调用(例如滚动或添加新元素时),因此您可以操作每一行 如你所愿。 不要忘记将 ListView 的数组适配器设置为此类的实例。

listView.setListAdapter(new mYourAdapter);  

关于android - 动态更改 ListView 的行布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7068423/

相关文章:

android - CollapsingToolbarLayout 中心标题不起作用

android - 如何在 Android 中单击 ImageView 时从一个 fragment 移动到另一个 fragment ?

winforms - 更改 Winform ListView 标题的背景颜色

java - 将全选行添加到 ListView 中

java - 刷新 JPanel-移动 JLabel

android - 图像在另一台设备上模糊

android - 开发Android联网游戏,用App Engine做服务器是否可行

android - 如何防止 Root 的 Android 手机安装我的应用程序?

Android DeviceAdminReceiver : onNetworkLogsAvailable intent never received

Android 如何正确通知 ListView 的数据集已更改