notifyDataSetChanged()不调用getView的问题

3DXcat 2017-11-09 09:35:52
想写一个可以在发送消息后更新List的功能,但是发送后没有反应

界面

输入 “send”并点击send按钮两次后的TAG

MainActivity中代码
public class MainActivity extends Activity {

private ListView msgListView;
private EditText inputText;
private Button send;
private MsgAdapter adapter;
private List<Msg> msgList = new ArrayList<Msg>();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setContentView(R.layout.activity_main);

initMsgs();
adapter = new MsgAdapter(MainActivity.this,R.layout.msg_item,msgList);
inputText = (EditText) findViewById(R.id.input_text);
send = (Button) findViewById(R.id.send);
msgListView = (ListView) findViewById(R.id.msg_list_view);

send.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
String content = inputText.getText().toString();
if(!"".equals(content)){
Msg msg = new Msg(content, Msg.TYPE_SENT);
Log.d("TAG",msgList.toString());
msgList.add(msg);
adapter.notifyDataSetChanged();
msgListView.setSelection(msgList.size());
inputText.setText("");
}

}
});
}
private void initMsgs(){

Msg msg1 = new Msg("Hello!",Msg.TYPE_RECEIVED);
msgList.add(msg1);
Msg msg2 = new Msg("good.",Msg.TYPE_RECEIVED);
msgList.add(msg2);
Msg msg3 = new Msg("what?",Msg.TYPE_RECEIVED);
msgList.add(msg3);
Msg msg4 = new Msg("You are right.",Msg.TYPE_RECEIVED);
msgList.add(msg4);

}

}

自定义的适配器如下,重写了getCount与getView,其中的Log没有执行
public class MsgAdapter extends ArrayAdapter<Msg> {

private int resourceId;
public MsgAdapter(Context context, int textViewResourceId, List<Msg> objects) {
super(context, textViewResourceId, objects);
resourceId = textViewResourceId;
Log.d("TAG","GET RESOURCEID");
}

@Override
public int getCount(){

int text = super.getCount();
Log.d("TAG", "COUNT RUNNING"+text);
return text;

}

@Override
public View getView(int position, View convertView, ViewGroup parent){
Msg msg = getItem(position);
View view;
ViewHolder viewHolder;
if(convertView == null){
view = LayoutInflater.from(getContext()).inflate(resourceId, null);
viewHolder = new ViewHolder();
viewHolder.leftLayout = (LinearLayout) view.findViewById(R.id.left_layout);
viewHolder.rightLayout = (LinearLayout) view.findViewById(R.id.right_layout);
viewHolder.leftMsg = (TextView) view.findViewById(R.id.left_msg);
viewHolder.rightMsg = (TextView) view.findViewById(R.id.right_msg);
view.setTag(viewHolder);
}
else{
view = convertView;
viewHolder = (ViewHolder)view.getTag();
}
Log.d("TAG","GETVIEW RUNNING");
if(msg.getType() == Msg.TYPE_RECEIVED){
viewHolder.leftLayout.setVisibility(View.VISIBLE);
viewHolder.rightLayout.setVisibility(View.GONE);
Log.d("TAG","1122");
viewHolder.leftMsg.setText(msg.getContent());
}
else if(msg.getType() == Msg.TYPE_SENT){
viewHolder.rightLayout.setVisibility(View.VISIBLE);
viewHolder.leftLayout.setVisibility(View.GONE);
Log.d("TAG","2211");
viewHolder.rightMsg.setText(msg.getContent());
}
return view;
}

class ViewHolder{

LinearLayout leftLayout;

LinearLayout rightLayout;

TextView leftMsg;

TextView rightMsg;

}

}
...全文
309 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
3DXcat 2017-11-09
  • 打赏
  • 举报
回复
引用 1 楼 jklwan 的回复:
msgListView没设置adapter…… msgListView初始化之后设置adapter

msgListView.setAdapter(adapter);
感谢!
jklwan 2017-11-09
  • 打赏
  • 举报
回复
msgListView没设置adapter…… msgListView初始化之后设置adapter

msgListView.setAdapter(adapter);

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧