gpt4 book ai didi

android - 数组适配器 : Change resource depending on item (Android)

转载 作者:行者123 更新时间:2023-11-30 00:39:31 26 4
gpt4 key购买 nike

我正在我的应用程序中创建一种消息传递 Activity ,我正在使用自定义的 ArrayAdapter 来显示 ListView 中的项目。我想让它们根据接收或发送的事实(如 Whatsapp 或任何其他消息传递应用程序)向右或向左移动。我尝试了以下代码,但它并不总是用正确的资源显示它们:

public class MessagesAdapter extends ArrayAdapter<Messages>{
private LayoutInflater mInflater;
private int mResource;
private String username;

/**
* Constructor
*
* @param context The current context.
* @param resource The resource ID for a layout file containing a TextView to use when
* instantiating views.
* @param messages The objects to represent in the ListView.
*/
public MessagesAdapter(Context context, int resource, List<Messages> messages, String username )
{
super( context, resource, messages );
mResource = 0;
mInflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
this.username = username;
}

@Override
public Messages getItem(int position) {
return super.getItem(getCount() - position - 1);
}

/**
* {@inheritDoc}
*/
@Override
public View getView( int position, View convertView, ViewGroup parent )
{
Messages item = getItem( position );

if (item.getSendername().contentEquals(username)){
mResource = R.layout.message_right;
Log.w("Messages", "TRUE" );

} else {
mResource = R.layout.message_left;
Log.w("Messages", "FALSE" );
}

View view = convertView == null ? mInflater.inflate( mResource, parent, false ) : convertView;

TextView txtMessage = (TextView) view.findViewById( R.id.txtMessage );
txtMessage.setText( item.getTextmess() );

return view;
}

它实际上会在正确的时间打印消息“TRUE”和“FALSE”,但有时它仍然会使用错误的资源显示消息。

最佳答案

看起来当您检查 convertView 是否为 null 时,如果为 true,您会膨胀您想要的资源,但如果不是,您只是重用之前的 View ,这可能不是正确的 View 资源。

问题出在这个三元行的 false 部分:

View view = convertView == null ? mInflater.inflate( mResource, parent, false ) : convertView;

当它为 false 时,当您检查用户名时,它不会考虑您的 mResource

您可能想要检查是否需要更改 convertView 的资源,或者可能甚至跳过检查 convertView 是否为 null 并且每次都只是膨胀一个新 View 。

关于android - 数组适配器 : Change resource depending on item (Android),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42752590/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com