Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法使用自定义适配器设置第一个ListView项_Java_Android_Listview - Fatal编程技术网

Java 无法使用自定义适配器设置第一个ListView项

Java 无法使用自定义适配器设置第一个ListView项,java,android,listview,Java,Android,Listview,我使用自定义适配器、消息类等。。。我无法更新第一个ListItem,第二个和其他Listview都已正确添加。通过更新,我的意思是默认情况下我有文本视图文本的名称,而不是消息 你能帮我弄明白为什么吗?非常感谢。 下面是代码的一部分: listView位于对话框窗口中 // (variables put in public static) chat_dialogue = new Dialog(context, R.style.hidetitle); c

我使用自定义适配器、消息类等。。。我无法更新第一个ListItem,第二个和其他Listview都已正确添加。通过更新,我的意思是默认情况下我有文本视图文本的名称,而不是消息

你能帮我弄明白为什么吗?非常感谢。 下面是代码的一部分: listView位于对话框窗口中

 // (variables put in public static)
 chat_dialogue = new Dialog(context, R.style.hidetitle);                    
 chat_dialogue.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT);
 chat_dialogue.setContentView(R.layout.wakeupcalls); // show the dialogue                   
 edit_Text_Chat = (EditText) chat_dialogue.findViewById(R.id.editText_chat);                
 chat_listView = (ListView)chat_dialogue.findViewById(R.id.ListViewChat);

 Fsa.messages = new ArrayList<Message>();

 Fsa.messages.add(new Message(the_sender,the_message,"(" + Fsa.date + Fsa.pre_mess2 + Fsa.heure + ")",true));

 adapter = new bubbleadapter(context,messages);

 chat_listView.setAdapter(adapter);                 
 adapter.notifyDataSetChanged();    
 chat_listView.setSelection(messages.size()-1);
然后,我添加了一些来自其他方法的新消息,这些方法显示得非常完美,但上面的这个方法没有!正如我说的,这只是第一个

现在,自定义适配器:

public class bubbleadapter extends BaseAdapter{
private Context mContext;
private ArrayList<Message> mMessages;


public bubbleadapter(Context context, ArrayList<Message> messages){
    super();        
    this.mContext = context;
    this.mMessages = messages;

}
@Override
public int getCount(){      
    return mMessages.size();

}
@Override
public Object getItem(int position) {

    return mMessages.get(position);
}

public View getView(int position, View convertView, ViewGroup parent) {
     Message message = (Message) this.getItem(position);


    ViewHolder holder;
    if (convertView ==null) {           
        holder = new ViewHolder();
        convertView = LayoutInflater.from(mContext).inflate(R.layout.chat_row, parent,false);
        holder.sender = (TextView) convertView.findViewById(R.id.textVSender);
        holder.message = (TextView) convertView.findViewById(R.id.message_text1);
        holder.date = (TextView) convertView.findViewById(R.id.textVDate);
        convertView.setTag(holder);
    } else {


        holder = (ViewHolder) convertView.getTag();
        holder.sender.setText(message.getSender());
        holder.message.setText(message.getMessage());
        holder.date.setText(message.getDate());

        LayoutParams lp = (LayoutParams) holder.message.getLayoutParams();

        if (message.isStatusMessage()) {

            holder.message.setBackgroundDrawable(null);
            holder.sender.setText(message.getSender());         
                holder.sender.setTextColor(Color.parseColor("#405478"));

        } else {

            if (message.isMine()) {                 
                holder.message.setBackgroundResource(R.drawable.speech_bubble_green);                   
                lp.gravity = Gravity.RIGHT;
            } else {                    
                holder.message.setBackgroundResource(R.drawable.speech_bubble_orange);
                lp.gravity = Gravity.LEFT;
            }
            holder.message.setLayoutParams(lp);             
        }           
    }

    return convertView;
}

private static class ViewHolder {
     TextView sender;
     TextView message;
     TextView date;
}

@Override
public long getItemId(int position) {       
    return position;
}

 }

删除else语句,如下所示:

public View getView(int position, View convertView, ViewGroup parent) {
     Message message = (Message) this.getItem(position);


ViewHolder holder;
if (convertView ==null) {           
    holder = new ViewHolder();
    convertView = LayoutInflater.from(mContext).inflate(R.layout.chat_row, parent,false);
    holder.sender = (TextView) convertView.findViewById(R.id.textVSender);
    holder.message = (TextView) convertView.findViewById(R.id.message_text1);
    holder.date = (TextView) convertView.findViewById(R.id.textVDate);
    convertView.setTag(holder);
} 


    holder = (ViewHolder) convertView.getTag();
    holder.sender.setText(message.getSender());
    holder.message.setText(message.getMessage());
    holder.date.setText(message.getDate());

    LayoutParams lp = (LayoutParams) holder.message.getLayoutParams();

    if (message.isStatusMessage()) {

        holder.message.setBackgroundDrawable(null);
        holder.sender.setText(message.getSender());         
            holder.sender.setTextColor(Color.parseColor("#405478"));

    } else {

        if (message.isMine()) {                 
            holder.message.setBackgroundResource(R.drawable.speech_bubble_green);                   
            lp.gravity = Gravity.RIGHT;
        } else {                    
            holder.message.setBackgroundResource(R.drawable.speech_bubble_orange);
            lp.gravity = Gravity.LEFT;
        }
        holder.message.setLayoutParams(lp);             
    }           


return convertView;
}

如果您能添加自定义适配器getView函数代码,这将有助于解决您的问题。为什么使用chat_listView.setSelectionmessages.size-1;?好啊我贴上去了!如果我想在不添加新消息的情况下更新一个项目,我使用setSelection控制我的listView…请添加用于添加其他消息的代码。我想问题就在那里。看起来你正在重置消息。你能投票表决答案吗很好的尝试,但它不会改变任何事情!还是一样的问题,我真的不知道为什么只有第一条消息…它没有意义,或者是chat_listView.setAdapteradapter有问题?也许这不是你唯一的问题。但是,可以肯定的是,这是其中之一,对于这种方法,你有一个不正确的逻辑。我将在您的代码中调查更多内容,以发现其他问题,并编辑我的答案。我做了一个变通方法,因为我没有选择权,我不明白!。所以我直接在set标记后面添加getTag,直到最后一个else结束。它是这样工作的。