在listview中加载早期消息,如什么应用程序

时间:2016-01-04 07:06:32

标签: android listview android-activity android-recyclerview

当我点击加载先前的消息时,先前的消息从数据库加载,但是列表视图滚动到顶部,这是不完成的,消息应该只加载在列表视图的顶部而不进行滚动。

这是我的主要活动代码

protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
                WindowManager.LayoutParams.FLAG_FULLSCREEN);
        setContentView(R.layout.private_group_chat);

    Intent i = getIntent();
    btnLoadMore = new Button(this);
    btnLoadMore.setText("Load Earlier Messages");
    lsvChat = (ListView) findViewById(R.id.lv_messsages);
    lsvChat.addHeaderView(btnLoadMore);
    chatModel = new ArrayList<ChatModel>();
    db = new Database3(getApplicationContext());
    chatModel = db.getSelectedIncidentDetails(getApplicationContext(),
            groupId, count);
    chatAdapter = new ChatAdapterGroup(getApplicationContext(), chatModel);
    lsvChat.setAdapter(chatAdapter);
    discoverModel = new ArrayList<DiscoverModel>();
    dm = new DiscoverModel();

}

这是我的基础适配器......

public class ChatAdapterGroup extends BaseAdapter {

    private Context context;
    private LayoutInflater inflater;
    int count = 0;
    private ArrayList<ChatModel> list;

    public ChatAdapterGroup(Context context, ArrayList<ChatModel> list) {
        this.context = context;
        this.list = list;

        inflater = (LayoutInflater) context
                .getSystemService(context.LAYOUT_INFLATER_SERVICE);
    }

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

    @Override
    public Object getItem(int position) {
        return list.get(position);
    }

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

    private class ViewHolder {
        TextView txt_left;
        TextView txt_right;
        TextView tv_fromName;
        RelativeLayout rl_left;
        RelativeLayout rl_right;
    }

    @Override
    public View getView(final int position, View v, ViewGroup arg2) {

        final ViewHolder holder;
        if (v == null) {

            holder = new ViewHolder();
            v = inflater.inflate(R.layout.chat_adapter, null);

            holder.txt_left = (TextView) v.findViewById(R.id.txt_left);

            holder.txt_right = (TextView) v.findViewById(R.id.txt_right);

            holder.tv_fromName = (TextView) v.findViewById(R.id.tv_fromName);

            holder.rl_left = (RelativeLayout) v.findViewById(R.id.rl_left);

            holder.rl_right = (RelativeLayout) v.findViewById(R.id.rl_right);

            v.setTag(holder);

        } else {
            holder = (ViewHolder) v.getTag();

        }

        if (list.get(position) != null) {

            if (list.get(position).getGroup_cordinate()
                    .equalsIgnoreCase("left")) {
                holder.txt_left.setText(""
                        + list.get(position).getGroup_messages_recive());
                holder.tv_fromName.setText(""
                        + list.get(position).getFrom_name_recive());
                holder.txt_left.setTextColor(Color.parseColor("#000000"));
                holder.rl_right.setVisibility(View.GONE);
                holder.rl_left.setVisibility(View.VISIBLE);
            } else {
                holder.txt_right.setText(""
                        + list.get(position).getGroup_messages_recive());
                holder.rl_left.setVisibility(View.GONE);
                holder.rl_right.setVisibility(View.VISIBLE);

            }

        }

        v.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                // notifyDataSetChanged();
            }
        });
        return v;
    }

}

和列表视图的xml编码.............

<ListView
        android:id="@+id/lv_messsages"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_above="@+id/ll_send"
        android:layout_below="@+id/rl_header"
        android:divider="@null"
        android:stackFromBottom="true"
        android:transcriptMode="alwaysScroll" />

1 个答案:

答案 0 :(得分:1)

您只需要一个名为“加载更多”的视图。并将其添加为列表视图的标题,并在其单击时从数据库中获取数据并使用notifyDatsetChanged()。就是这样。

  LayoutInflater  inflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE);
convertViewHeader = inflater.inflate(R.layout.row_idea_list , null);
convertViewHeader.setBackgroundColor(getResources().getColor(R.color.gray_light_light));

listView.addHeaderView(convertViewHeader, null, false);

在此convertView上设置onclickListener,并在其点击时加载更多数据。

相关问题