ListView的item设置置顶

1.activity

public class TopListViewActivity extends Activity {

private static int ON_TOP = 1;

private static int CANCEL_TOP = 0;

public static String TOP_STATES = "TOP";

private ListView mListView;

private List sessionList;

private SessionItemAdapter itemAdapter;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_top_listview);

initView();

registerListener();

}

private void registerListener() {

mListView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {

@Override

public boolean onItemLongClick(AdapterView> parent, View view, final int position, long id) {

final Session session = (Session) parent.getItemAtPosition(position);

Bundle bundle = new Bundle();

bundle.putInt(TOP_STATES, session.getTop());

PopupDialogFragment popupDialog = new PopupDialogFragment();

popupDialog.setArguments(bundle);

popupDialog.setItemOnClickListener(new PopupDialogFragment.DialogItemOnClickListener() {

@Override

public void onTop() {

//置顶

session.setTop(ON_TOP);

session.setTime(System.currentTimeMillis());

refreshView();

}

@Override

public void onCancel() {

//取消

session.setTop(CANCEL_TOP);

refreshView();

}

});

popupDialog.show(getFragmentManager(), "POPUP");

return true;

}

});

}

private void initView() {

mListView = (ListView) findViewById(R.id.lv);

sessionList = new ArrayList<>();

//简单实现Item数据

TypedArray iconArray = getResources().obtainTypedArray(R.array.icon_array);

for (int i = 0; i < 8; i++) {

Session session = new Session();

session.setAvatar(iconArray.getResourceId(i,R.mipmap.ic_launcher));

sessionList.add(session);

}

itemAdapter = new SessionItemAdapter(this);

mListView.setAdapter(itemAdapter);

refreshView();

iconArray.recycle();

}

private void refreshView() {

//如果不调用sort方法,是不会进行排序的,也就不会调用compareTo

Collections.sort(sessionList);

itemAdapter.updateData(sessionList);

}

}

2.fragment

public class PopupDialogFragment extends DialogFragment {

private DialogItemOnClickListener itemOnClickListener;

@Nullable

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

View view = inflater.inflate(R.layout.popview, null);

TextView onTopTv = (TextView) view.findViewById(R.id.on_top_tv);

TextView cancelTv = (TextView) view.findViewById(R.id.cancel_top_tv);

Bundle bundle = getArguments();

int isTop = bundle.getInt(TopListViewActivity.TOP_STATES);

//判断是否已经置顶

if (isTop == 1) {

onTopTv.setVisibility(View.GONE);

cancelTv.setVisibility(View.VISIBLE);

} else if (isTop == 0) {

onTopTv.setVisibility(View.VISIBLE);

cancelTv.setVisibility(View.GONE);

}

onTopTv.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

getDialog().dismiss();

itemOnClickListener.onTop();

}

});

cancelTv.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

getDialog().dismiss();

itemOnClickListener.onCancel();

}

});

getDialog().getWindow().requestFeature(STYLE_NO_TITLE);

setStyle(STYLE_NO_FRAME, android.R.style.Theme_Light);

setCancelable(true);

getDialog().getWindow().setBackgroundDrawableResource(R.color.write_bg);

return view;

}

public void setItemOnClickListener(DialogItemOnClickListener itemOnClickListener) {

this.itemOnClickListener = itemOnClickListener;

}

public interface DialogItemOnClickListener {

void onTop();

void onCancel();

}

}

3.itemview.xml

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:id="@+id/bg"

android:orientation="horizontal">

android:id="@+id/avatar_img"

android:layout_width="60dp"

android:layout_height="60dp"

android:layout_gravity="center_vertical" />

android:id="@+id/textView"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center_vertical"

android:layout_marginLeft="30dp"

android:text="hello word"

android:textSize="20sp" />

4.attrs

@mipmap/ic_ac_unit_black

@mipmap/ic_airport_shuttle_black

@mipmap/ic_all_inclusive_black

@mipmap/ic_beach_access_black

@mipmap/ic_casino_black

@mipmap/ic_child_care_black

@mipmap/ic_child_friendly_black

@mipmap/ic_free_breakfast_black

5.popview

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:layout_marginLeft="20dp"

android:layout_marginRight="20dp"

android:background="@color/write_bg"

>

android:id="@+id/on_top_tv"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:padding="15dp"

android:text="选择置顶"

android:textSize="20sp"

android:layout_gravity="center_horizontal"

/>

android:layout_width="match_parent"

android:layout_height="0.4dp"

android:background="@color/common_line_color"/>

android:id="@+id/cancel_top_tv"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:gravity="center_horizontal"

android:padding="15dp"

android:text="取消置顶"

android:textSize="20sp"

android:layout_gravity="center_horizontal"

/>

6.session

package com.antquenn.demos.bean;

import java.io.Serializable;

import java.util.Calendar;

/**

* Created by ant_quenn on 2020/11/10.

*/

public class Session implements Serializable, Comparable {

/**

* 是否置顶

*/

public int top;

/**

* 置顶时间

**/

public long time;

/**

* 头像

*/

public int avatar;

public long getTime() {

return time;

}

public void setTime(long time) {

this.time = time;

}

public int getTop() {

return top;

}

public void setTop(int top) {

this.top = top;

}

public int getAvatar() {

return avatar;

}

public void setAvatar(int avatar) {

this.avatar = avatar;

}

@Override

public int compareTo(Object another) {

if (another == null || !(another instanceof Session)) {

return -1;

}

Session otherSession = (Session) another;

/**置顶判断 ArrayAdapter是按照升序从上到下排序的,就是默认的自然排序

* 如果是相等的情况下返回0,包括都置顶或者都不置顶,返回0的情况下要

* 再做判断,拿它们置顶时间进行判断

* 如果是不相等的情况下,otherSession是置顶的,则当前session是非置顶的,

* 应该在otherSession下面,所以返回1

* 同样,session是置顶的,则当前otherSession是非置顶的,

* 应该在otherSession上面,所以返回-1

* */

int result = 0 - (top - otherSession.getTop());

if (result == 0) {

result = 0 - compareToTime(time, otherSession.getTime());

}

return result;

}

/**

* 根据时间对比

* */

public static int compareToTime(long lhs, long rhs) {

Calendar cLhs = Calendar.getInstance();

Calendar cRhs = Calendar.getInstance();

cLhs.setTimeInMillis(lhs);

cRhs.setTimeInMillis(rhs);

return cLhs.compareTo(cRhs);

}

}

android listview item置顶,ListView的item置顶相关推荐

  1. android listview标题置顶,Android仿QQ左滑删除置顶ListView操作

    最近闲来无事,于是研究了一下qq的左滑删除效果,尝试着实现了一下,先上效果图: 大致思路原理: - 通过设置margin实现菜单的显示与隐藏 - 监听onTouchEvent,处理滑动事件 上代码 i ...

  2. android静态动画,LayoutAnimation给ListView中的item设置动态出场效果(实例)

    LayoutAnimation作用于ViewGroup,为ViewGroup指定一个动画,当它的子元素出场时都按照这个动画出场. LayoutAnimation作用于viewgroup有两种方式: 1 ...

  3. android listview边框颜色,Android实现带有边框的ListView和item的方法

    本文实例讲述了Android实现带有边框的ListView和item的方法.分享给大家供大家参考,具体如下: 想为ListView和item四周添加边框有两种方法: 1.贴一张带有边框效果的背景图 2 ...

  4. android 两列菜单,【Android】实战开发之ListView同一个item显示2列的实现方法(仿2列商品列表)...

    Android实战开发中,ListView控件用途十分广泛,各种自定义控件多种多样.当项目要求实现一个2列的商品列表形式的界面,我们首先肯定想到用ListView,然后我们可以使用百度的自定义List ...

  5. 面试 -- ListView对其指定的子Item进行单独的刷新

    1,最近在面试题目的时候突然看到了问题"ListView对其指定的子Item进行单独的刷新",当时感觉一脸懵逼,还是第一次听到这个问题,也就是不能使用adapter.notifyD ...

  6. Android 5.0学习之ListView升级版RecyclerView

     前言 大家都知道ListView在我们开发中很常用,Android5.0的到来,它给我们带来了一个替代 ListView的新的控件,也可以说是ListView的升级版,那就是RecyclerVi ...

  7. Android小項目之---ListView实现论坛管理效果(附源碼)

    在android系統中,ListView的用法稍微複雜一點,配置Adpater就有幾種方法,如ArrayAdapter,SimpleAdapter等.查了一些網上的相關例子,有很多都是用ListAct ...

  8. Carson带你学Android:全面解析列表ListView与AdapterView

    前言 ListView在Android开发中十分常见 今天,我将为大家带来ListView与AdapterView全面解析,含其特点.工作原理等,希望你们会喜欢. Carson带你学Android系列 ...

  9. Android性能优化之提高ListView性能的技巧

    ListView优化一直是一个老生常谈的问题,不管是面试还是平常的开发中,ListView永远不会被忽略掉,那么这篇文章我们来看看如何最大化的优化ListView的性能. 1.在adapter中的ge ...

最新文章

  1. 那些离开大厂,回归学术界的科学家们!
  2. flume自定义Interceptor
  3. 多个不同的app应用间应该如何进行消息推送呢?
  4. Fidder 抓取Android模拟器数据包
  5. SpringMVC的优点
  6. boost::mp11::mp_with_index相关用法的测试程序
  7. linux convert 添加文字,Linux convert命令有什么用
  8. DockerCompose-初始Compose
  9. 面试总结----java初级工程师
  10. 深入浅出 RPC - 浅出篇+深入篇
  11. APIGEE – API网关简介
  12. 教师管理系统设计报告java_教师办公管理系统的设计与实现
  13. ssis包部署提示不能与集成身份验证一起使用_何时使用和不使用云原生安全工具...
  14. iOS开发小技巧 -- tableView-section圆角边框解决方案
  15. js计算html的font-size
  16. java 经纬度的距离计算工具包
  17. 2021年高压电工考试及高压电工考试题
  18. 斐讯K2 新版固件刷机教程
  19. pdf文件如何生成目录 wps_WPS文档如何生成目录你会了吗?
  20. 软件工程概述思维导图总结(二)

热门文章

  1. 域名的MX设置及校验方法
  2. JavaScript中使Promise模式进行异步编程
  3. 话里话外:ERP与PDM、MES的关系区别是什么
  4. 51CTO交流摘录(1):SOC的定义、适用性和组成
  5. PowerTip of the Day from powershell.com上周汇总(六)
  6. 使用 Dapr 缩短软件开发周期,提高生产效率
  7. 2021 年 CNCF 和开源速度的年终报告
  8. Dapr牵手.NET学习笔记:状态管理之docker-compose发布
  9. NET问答: 如何使用 C# 直接从 JSON String 中提取特定值 ?
  10. .NET Core HttpClient请求异常思考