不仅可以看到列表视图中的第一行

时间:2016-09-18 20:19:42

标签: java android listview android-adapter

我刚刚创建了一个listview,我可以看到listview中的所有行都放到第一行。任何人都知道为什么会这样。我的适配器代码是:

public class ChatAdapter extends ArrayAdapter<Message> {

public ChatAdapter(Context context, int resource, List<Message> items) {
    super(context, resource, items);
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;

    if (v == null) {
        LayoutInflater vi = LayoutInflater.from(getContext());
        v = vi.inflate(R.layout.chat_raw, null);
    }
    Message message = getItem(position);
    Log.d("GET VIEW MESSAGE:  ", message.getText());
    if (message != null) {
        TextView tvName = (TextView) v.findViewById(R.id.tvChatName);
        TextView tvMessage = (TextView) v.findViewById(R.id.tvChatMessage);

        if (tvName != null) {
            tvName.setText(message.getUserName());
        }

        if (tvMessage != null) {
            tvMessage.setText(message.getText());
        }
    }
    return v;
}

}

我必须说明一行:Log.d(“GET VIEW MESSAGE:”,message.getText());我看到了所有的消息,也看到了第一个消息,但在列表视图中我没有看到第一个消息。

编辑: 只是根据你的segest改变代码,但我仍然有同样的问题,我看不到第一行。我的适配器代码是:

public class ChatAdapter extends ArrayAdapter<Message> {
private Context context;

public ChatAdapter(Context context, int resource, List<Message> items) {
    super(context, resource, items);
    this.context = context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View row = convertView;
    ViewHolder viewHolder=null;
    if(convertView==null) {
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        row = inflater.inflate(R.layout.chat_raw, null);
        viewHolder = new ViewHolder(row);
        row.setTag(viewHolder);
    } else {
        viewHolder = (ViewHolder) row.getTag();
    }

    Message message = getItem(position);
    if(message!=null) {
        viewHolder.tvMessage.setText(message.getText());
        viewHolder.tvName.setText(message.getUserName());
    }

    return row;
}

public class ViewHolder {
    TextView tvName;
    TextView tvMessage;

    public ViewHolder(View view) {
        tvName = (TextView) view.findViewById(R.id.tvChatName);
        tvMessage = (TextView) view.findViewById(R.id.tvChatMessage);
    }
}
}

我的代码是:

public class ChatFragment extends Fragment {
private ListView lvChat;
private Button btChatSend;
private EditText etChatMessage;
private ArrayList<Message> alMessage;
private int groupID, userId;
private String userName;
private RequestQueue requestQueue;
private Gson gson;

public ChatFragment() {
    // Required empty public constructor
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    alMessage = new ArrayList<>();
    groupID = ((DrawAndChat) getActivity()).getGroupId();
    userName = ((DrawAndChat) getActivity()).getUserName();
    userId = ((DrawAndChat) getActivity()).getUserId();
    requestQueue = Volley.newRequestQueue(getActivity());
    getAllMessages();
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.chat_fragment, container, false);
    lvChat = (ListView) view.findViewById(R.id.lvChat);
    etChatMessage = (EditText) view.findViewById(R.id.etChatMessage);
    btChatSend = (Button) view.findViewById(R.id.btChatSend);
    lvChat.setAdapter(new ChatAdapter(getActivity(), R.layout.chat_raw, alMessage));
    btChatSend.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            sendMessage();
        }
    });
    return view;
}

0 个答案:

没有答案