我正在开发一个应用程序中的聊天模块,我希望两个参与者的消息以相反的对齐方式(其他用户左对齐,我自己的消息右对齐)。现在,我的行布局通过静态布局 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/