diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml new file mode 100644 index 0000000..681f41a --- /dev/null +++ b/.idea/codeStyles/Project.xml @@ -0,0 +1,116 @@ + + + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
+
+
\ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 31a27b7..0bcd982 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -13,6 +13,7 @@ diff --git a/.idea/misc.xml b/.idea/misc.xml index 3be1ace..2071cbc 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -27,17 +27,7 @@ - - - - - - - - - - - + diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..35eb1dd --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 17a0186..bef93e1 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -1,5 +1,9 @@ apply plugin: 'com.android.application' +apply plugin: 'kotlin-android' +apply plugin: 'kotlin-android-extensions' +apply plugin: 'kotlin-kapt' + android { compileSdkVersion 26 buildToolsVersion "26.0.2" @@ -20,13 +24,17 @@ android { } dependencies { - compile fileTree(dir: 'libs', include: ['*.jar']) + implementation fileTree(dir: 'libs', include: ['*.jar']) androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', { exclude group: 'com.android.support', module: 'support-annotations' }) - compile 'com.android.support:appcompat-v7:26.1.0' - compile 'com.android.support:recyclerview-v7:26.1.0' - testCompile 'junit:junit:4.12' - compile project(path: ':recyclertreeview-lib') + + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version" + + implementation 'com.android.support:appcompat-v7:26.1.0' + implementation 'com.android.support:recyclerview-v7:26.1.0' + testImplementation 'junit:junit:4.12' + implementation project(path: ':recyclertreeview-lib') + implementation 'com.google.code.gson:gson:2.8.5' // compile 'com.github.TellH:RecyclerTreeView:1.2.0' } diff --git a/app/src/main/java/tellh/com/recyclertreeview/MainActivity.java b/app/src/main/java/tellh/com/recyclertreeview/MainActivity.java index 5fc3861..5f82da1 100644 --- a/app/src/main/java/tellh/com/recyclertreeview/MainActivity.java +++ b/app/src/main/java/tellh/com/recyclertreeview/MainActivity.java @@ -2,121 +2,155 @@ import android.os.Bundle; import android.support.v7.app.AppCompatActivity; -import android.support.v7.widget.LinearLayoutManager; -import android.support.v7.widget.RecyclerView; -import android.view.Menu; -import android.view.MenuItem; -import android.widget.ImageView; + +import com.google.gson.Gson; import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import tellh.com.recyclertreeview.bean.Dir; -import tellh.com.recyclertreeview.bean.File; -import tellh.com.recyclertreeview.viewbinder.DirectoryNodeBinder; -import tellh.com.recyclertreeview.viewbinder.FileNodeBinder; -import tellh.com.recyclertreeview_lib.TreeNode; -import tellh.com.recyclertreeview_lib.TreeViewAdapter; +import tellh.com.recyclertreeview.bean.Folder; +import tellh.com.recyclertreeview.view.SelectTreeView; public class MainActivity extends AppCompatActivity { - private RecyclerView rv; - private TreeViewAdapter adapter; - @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); - initView(); - initData(); - } - - private void initData() { - List nodes = new ArrayList<>(); - TreeNode app = new TreeNode<>(new Dir("app")); - nodes.add(app); - app.addChild( - new TreeNode<>(new Dir("manifests")) - .addChild(new TreeNode<>(new File("AndroidManifest.xml"))) - ); - app.addChild( - new TreeNode<>(new Dir("java")).addChild( - new TreeNode<>(new Dir("tellh")).addChild( - new TreeNode<>(new Dir("com")).addChild( - new TreeNode<>(new Dir("recyclertreeview")) - .addChild(new TreeNode<>(new File("Dir"))) - .addChild(new TreeNode<>(new File("DirectoryNodeBinder"))) - .addChild(new TreeNode<>(new File("File"))) - .addChild(new TreeNode<>(new File("FileNodeBinder"))) - .addChild(new TreeNode<>(new File("TreeViewBinder"))) - ) - ) - ) - ); - TreeNode res = new TreeNode<>(new Dir("res")); - nodes.add(res); - res.addChild( - new TreeNode<>(new Dir("layout")).lock() // lock this TreeNode - .addChild(new TreeNode<>(new File("activity_main.xml"))) - .addChild(new TreeNode<>(new File("item_dir.xml"))) - .addChild(new TreeNode<>(new File("item_file.xml"))) - ); - res.addChild( - new TreeNode<>(new Dir("mipmap")) - .addChild(new TreeNode<>(new File("ic_launcher.png"))) - ); - - rv.setLayoutManager(new LinearLayoutManager(this)); - adapter = new TreeViewAdapter(nodes, Arrays.asList(new FileNodeBinder(), new DirectoryNodeBinder())); - // whether collapse child nodes when their parent node was close. -// adapter.ifCollapseChildWhileCollapseParent(true); - adapter.setOnTreeNodeListener(new TreeViewAdapter.OnTreeNodeListener() { - @Override - public boolean onClick(TreeNode node, RecyclerView.ViewHolder holder) { - if (!node.isLeaf()) { - //Update and toggle the node. - onToggle(!node.isExpand(), holder); -// if (!node.isExpand()) -// adapter.collapseBrotherNode(node); - } - return false; - } - - @Override - public void onToggle(boolean isExpand, RecyclerView.ViewHolder holder) { - DirectoryNodeBinder.ViewHolder dirViewHolder = (DirectoryNodeBinder.ViewHolder) holder; - final ImageView ivArrow = dirViewHolder.getIvArrow(); - int rotateDegree = isExpand ? 90 : -90; - ivArrow.animate().rotationBy(rotateDegree) - .start(); - } - }); - rv.setAdapter(adapter); - } - - private void initView() { - rv = (RecyclerView) findViewById(R.id.rv); - } + SelectTreeView selectTreeView = findViewById(R.id.select_tree_view); - @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.menu_main, menu); - return true; - } + String str = "{\n" + + "\t\"children\": [{\n" + + "\t\t\"children\": [],\n" + + "\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\"name\": \"测试子部门\",\n" + + "\t\t\"itemList\": [{\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"2edce931c95c4dfa85f74e63ebaf62c5\",\n" + + "\t\t\t\"name\": \"泉州-小电65656\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"3e54fc5bd8a24a1f8589c162bc1260e6\",\n" + + "\t\t\t\"name\": \"2422343\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"57b07f3fc3454ec7b8aaa68d5be33712\",\n" + + "\t\t\t\"name\": \"泉州-小电3425456\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"5c56f6cfb62b4d9195b2af51f9685d7f\",\n" + + "\t\t\t\"name\": \"泉州-东海A10066\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"799f3465754247d9b962de57ebc67758\",\n" + + "\t\t\t\"name\": \"闽C747474\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"963aef4009754321b4f61653dbfc8e0d\",\n" + + "\t\t\t\"name\": \"86588335\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"afa63486c2bc42ec80963ec84923b4b0\",\n" + + "\t\t\t\"name\": \"泉州-小电66666\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"f0147382fde84277b21bbba6182ad06b\",\n" + + "\t\t\t\"name\": \"86588336\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"f414a5dbd4a64107a74cca24a3582c28\",\n" + + "\t\t\t\"name\": \"闽C747475\"\n" + + "\t\t}],\n" + + "\t\t\"parentId\": \"c2e7783bc2754801886b97b460274c24\"\n" + + "\t},{\n" + + "\t\t\"children\": [],\n" + + "\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\"name\": \"测试子部门111\",\n" + + "\t\t\"itemList\": [{\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"2edce931c95c4dfa85f74e63ebaf62c5\",\n" + + "\t\t\t\"name\": \"泉州-小电65656\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"3e54fc5bd8a24a1f8589c162bc1260e6\",\n" + + "\t\t\t\"name\": \"2422343\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"57b07f3fc3454ec7b8aaa68d5be33712\",\n" + + "\t\t\t\"name\": \"泉州-小电3425456\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"5c56f6cfb62b4d9195b2af51f9685d7f\",\n" + + "\t\t\t\"name\": \"泉州-东海A10066\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"799f3465754247d9b962de57ebc67758\",\n" + + "\t\t\t\"name\": \"闽C747474\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"963aef4009754321b4f61653dbfc8e0d\",\n" + + "\t\t\t\"name\": \"86588335\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"afa63486c2bc42ec80963ec84923b4b0\",\n" + + "\t\t\t\"name\": \"泉州-小电66666\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"f0147382fde84277b21bbba6182ad06b\",\n" + + "\t\t\t\"name\": \"86588336\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"f414a5dbd4a64107a74cca24a3582c28\",\n" + + "\t\t\t\"name\": \"闽C747475\"\n" + + "\t\t}],\n" + + "\t\t\"parentId\": \"c2e7783bc2754801886b97b460274c24\"\n" + + "\t}],\n" + + "\t\"depId\": \"c2e7783bc2754801886b97b460274c24\",\n" + + "\t\"name\": \"c测试部门\",\n" + + "\t\"itemList\": [{\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"2edce931c95c4dfa85f74e63ebaf62c5\",\n" + + "\t\t\t\"name\": \"泉州-小电65656\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"3e54fc5bd8a24a1f8589c162bc1260e6\",\n" + + "\t\t\t\"name\": \"2422343\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"57b07f3fc3454ec7b8aaa68d5be33712\",\n" + + "\t\t\t\"name\": \"泉州-小电3425456\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"5c56f6cfb62b4d9195b2af51f9685d7f\",\n" + + "\t\t\t\"name\": \"泉州-东海A10066\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"799f3465754247d9b962de57ebc67758\",\n" + + "\t\t\t\"name\": \"闽C747474\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"963aef4009754321b4f61653dbfc8e0d\",\n" + + "\t\t\t\"name\": \"86588335\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"afa63486c2bc42ec80963ec84923b4b0\",\n" + + "\t\t\t\"name\": \"泉州-小电66666\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"f0147382fde84277b21bbba6182ad06b\",\n" + + "\t\t\t\"name\": \"86588336\"\n" + + "\t\t}, {\n" + + "\t\t\t\"depId\": \"19972f7083ed4c3c9c8b00c96e906b45\",\n" + + "\t\t\t\"ebikeId\": \"f414a5dbd4a64107a74cca24a3582c28\",\n" + + "\t\t\t\"name\": \"闽C747475\"\n" + + "\t\t}],\n" + + "\t\"parentId\": \"b5980cac5fc14b11113e43ebf9fe673d\"\n" + + "}"; - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - switch (id) { - case R.id.id_action_close_all: - adapter.collapseAll(); - break; - default: - break; - } - return super.onOptionsItemSelected(item); + Folder item = new Gson().fromJson(str, Folder.class); + ArrayList folders = new ArrayList<>(); + folders.add(item); + selectTreeView.showFolders(folders); } } diff --git a/app/src/main/java/tellh/com/recyclertreeview/bean/Dir.java b/app/src/main/java/tellh/com/recyclertreeview/bean/Dir.java deleted file mode 100644 index 035bbd9..0000000 --- a/app/src/main/java/tellh/com/recyclertreeview/bean/Dir.java +++ /dev/null @@ -1,21 +0,0 @@ -package tellh.com.recyclertreeview.bean; - -import tellh.com.recyclertreeview.R; -import tellh.com.recyclertreeview_lib.LayoutItemType; - -/** - * Created by tlh on 2016/10/1 :) - */ - -public class Dir implements LayoutItemType { - public String dirName; - - public Dir(String dirName) { - this.dirName = dirName; - } - - @Override - public int getLayoutId() { - return R.layout.item_dir; - } -} diff --git a/app/src/main/java/tellh/com/recyclertreeview/bean/File.java b/app/src/main/java/tellh/com/recyclertreeview/bean/File.java index 03b5a89..17d05f1 100644 --- a/app/src/main/java/tellh/com/recyclertreeview/bean/File.java +++ b/app/src/main/java/tellh/com/recyclertreeview/bean/File.java @@ -3,19 +3,31 @@ import tellh.com.recyclertreeview.R; import tellh.com.recyclertreeview_lib.LayoutItemType; -/** - * Created by tlh on 2016/10/1 :) - */ - public class File implements LayoutItemType { - public String fileName; + private boolean isSelect = false; + private String name;// + + public File() { + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public void setSelect(boolean select) { + isSelect = select; + } - public File(String fileName) { - this.fileName = fileName; + public boolean isSelect() { + return isSelect; } @Override public int getLayoutId() { - return R.layout.item_file; + return R.layout.item_list; } } diff --git a/app/src/main/java/tellh/com/recyclertreeview/bean/Folder.java b/app/src/main/java/tellh/com/recyclertreeview/bean/Folder.java new file mode 100644 index 0000000..8ae00f4 --- /dev/null +++ b/app/src/main/java/tellh/com/recyclertreeview/bean/Folder.java @@ -0,0 +1,64 @@ +package tellh.com.recyclertreeview.bean; + +import java.util.List; + +import tellh.com.recyclertreeview.R; +import tellh.com.recyclertreeview_lib.LayoutItemType; + +/** + * 节点数 + */ +public class Folder implements LayoutItemType { + private boolean isSelect = false; + + /** 名称 */ + private String name; + + /** 数据列表 */ + List itemList;// + + /** 子节点 */ + private List children; //(结果嵌套) + + public Folder() { + } + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + + public List getItemList() { + return itemList; + } + + public void setItemList(List itemList) { + this.itemList = itemList; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public boolean isSelect() { + return isSelect; + } + + public void setSelect(boolean select) { + isSelect = select; + } + + @Override + public int getLayoutId() { + return R.layout.item_folder; + } +} diff --git a/app/src/main/java/tellh/com/recyclertreeview/util/UIUtils.java b/app/src/main/java/tellh/com/recyclertreeview/util/UIUtils.java new file mode 100644 index 0000000..9d3ea39 --- /dev/null +++ b/app/src/main/java/tellh/com/recyclertreeview/util/UIUtils.java @@ -0,0 +1,29 @@ +package tellh.com.recyclertreeview.util; + +import android.content.Context; +import android.graphics.drawable.Drawable; + +public class UIUtils { + private static Context context; + public static void init(Context context) + { + UIUtils.context = context; + } + public static int dip2px(float dip) { + float density = context.getResources().getDisplayMetrics().density; + return (int) (dip * density + 0.5f); + } + + public static float px2dip(int px) { + float density = context.getResources().getDisplayMetrics().density; + return px / density; + } + + // 获取图片 + public static Drawable getDrawableWithSize(int id) { + Drawable dra = context.getResources().getDrawable(id); + dra.setBounds(0, 0, dra.getIntrinsicWidth(), dra.getIntrinsicHeight()); + return dra; + } + +} diff --git a/app/src/main/java/tellh/com/recyclertreeview/view/EmptyRecyclerView.java b/app/src/main/java/tellh/com/recyclertreeview/view/EmptyRecyclerView.java new file mode 100644 index 0000000..6d60bbd --- /dev/null +++ b/app/src/main/java/tellh/com/recyclertreeview/view/EmptyRecyclerView.java @@ -0,0 +1,79 @@ +package tellh.com.recyclertreeview.view; + +import android.content.Context; +import android.support.v7.widget.RecyclerView; +import android.util.AttributeSet; +import android.view.View; + + + +/** + * 带有空布局的EmptyRecyclerView + */ +public class EmptyRecyclerView extends RecyclerView { + + private View emptyView; + + final private RecyclerView.AdapterDataObserver observer = new AdapterDataObserver() { + @Override + public void onChanged() { + checkIfEmpty(); + } + + @Override + public void onItemRangeInserted(int positionStart, int itemCount) { + checkIfEmpty(); + } + + @Override + public void onItemRangeRemoved(int positionStart, int itemCount) { + checkIfEmpty(); + } + }; + + + public EmptyRecyclerView(Context context) { + super(context); + } + + + public EmptyRecyclerView(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public EmptyRecyclerView(Context context, AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + + private void checkIfEmpty() { + if (emptyView != null && getAdapter() != null) { + + Adapter adapter = getAdapter(); + boolean emptyViewVisible = adapter.getItemCount() == 0; + + emptyView.setVisibility(emptyViewVisible ? VISIBLE : GONE); + //setVisibility(emptyViewVisible ? GONE : VISIBLE); + } + } + + @Override + public void setAdapter(Adapter adapter) { + final Adapter oldAdapter = getAdapter(); + if (oldAdapter != null) { + oldAdapter.unregisterAdapterDataObserver(observer); + } + super.setAdapter(adapter); + if (adapter != null) { + adapter.registerAdapterDataObserver(observer); + } + checkIfEmpty(); + } + + public void setEmptyView(View emptyView) { + this.emptyView = emptyView; + + + checkIfEmpty(); + } +} diff --git a/app/src/main/java/tellh/com/recyclertreeview/view/SelectTreeView.kt b/app/src/main/java/tellh/com/recyclertreeview/view/SelectTreeView.kt new file mode 100644 index 0000000..47d411e --- /dev/null +++ b/app/src/main/java/tellh/com/recyclertreeview/view/SelectTreeView.kt @@ -0,0 +1,238 @@ +package tellh.com.recyclertreeview.view + +import android.content.Context +import android.support.v7.widget.LinearLayoutManager +import android.support.v7.widget.RecyclerView +import android.util.AttributeSet +import android.view.LayoutInflater +import android.view.View +import android.widget.LinearLayout +import com.nlinks.minielectric_helper_android.module.message.FileBinder +import com.nlinks.minielectric_helper_android.module.message.FolderBinder +import kotlinx.android.synthetic.main.layout_empty_list.view.* +import kotlinx.android.synthetic.main.layout_select_view.view.* +import tellh.com.recyclertreeview.R +import tellh.com.recyclertreeview.bean.File +import tellh.com.recyclertreeview.bean.Folder +import tellh.com.recyclertreeview.util.UIUtils +import tellh.com.recyclertreeview_lib.LayoutItemType +import tellh.com.recyclertreeview_lib.TreeNode +import tellh.com.recyclertreeview_lib.TreeViewAdapter +import java.util.* +import kotlin.collections.ArrayList + +/** + * 项目名称:minielectric-helper-android + * 类描述:消息列表过滤视图 + * @author hxiaohui0@linewell.com + * 创建时间:2019/10/25 0025 上午 9:14 + */ +class SelectTreeView(context: Context?, attrs: AttributeSet?) : LinearLayout(context, attrs){ + + private var filterData: Folder? = null + + private var filterView:View? = null + + var filterListener: OnFilterListener? = null + + init { + + UIUtils.init(context?.applicationContext) + + filterView = LayoutInflater.from(context).inflate(R.layout.layout_select_view, this, true) + + setListeners() + + var rv = rv_filter + rv.setEmptyView(llayout_empty_view) + rv.layoutManager = LinearLayoutManager(context) + } + + private fun setListeners() { + } + + /** + * 加载过滤配置数据 + */ + fun showFolders(data:ArrayList) { + filterData = Folder() + filterData!!.children = data + var firstNode = TreeNode(filterData!!) + changeToNodes(firstNode) + initFilterList(ArrayList(firstNode.childList)) + + } + + /** + * 设置过滤树形控件的列表适配器 + */ + private fun initFilterList(filterNodes : ArrayList>) { + var rv = rv_filter + var adapter = TreeViewAdapter(filterNodes, Arrays.asList(FolderBinder(rv), FileBinder(rv))) + adapter.setOnTreeNodeListener(object : TreeViewAdapter.OnTreeNodeListener { + override fun onClick(node: TreeNode<*>, holder: RecyclerView.ViewHolder?): Boolean { + if (holder is FolderBinder.ViewHolder) { + onToggle(!node.isExpand, holder) + } + return false + } + + override fun onToggle(isExpand: Boolean, holder: RecyclerView.ViewHolder?) { + if(holder is FolderBinder.ViewHolder) + { + val ivArrow = holder.iv_arrow + val rotateDegree = if (isExpand) 90 else -90 + ivArrow!!.animate().rotationBy(rotateDegree.toFloat()) + .start() + } + } + }) + adapter.setPadding(UIUtils.dip2px(20F)) + rv.adapter = adapter + } + + /** + * 将数据转化为树形控件需要的数据类型 + */ + private fun changeToNodes(data: TreeNode?) { + if(data != null) + { + + var bikeList = data.content.itemList + if(bikeList != null && bikeList.isNotEmpty()) + { + for(b in bikeList) + { + var nodeChild = TreeNode(b) + data.addChild(nodeChild) + } + } + + var children = data.content.children + if(children != null && children.size > 0) + { + for(c in children) + { + var nodeChild = TreeNode(c) + data.addChild(nodeChild) + changeToNodes(nodeChild) + } + } + + } + } + + + /** + * 获取过滤的车辆id列表 + */ + public fun getSelectCars(): ArrayList { + var list = arrayListOf() + if(filterData != null) + { + addItemCars(filterData, list) + } + return list + } + + /** + * 重置过滤消息设置 + */ + private fun resetSelect() { + if(filterData == null) + { + return + } + resetItemCarSelect(Folder().apply { children = arrayListOf(filterData) }) + + rv_filter.adapter?.notifyDataSetChanged() + } + + /** + * 递归方法:添加已选择的车辆id到到list中 + */ + private fun addItemCars(d: Folder?, list:ArrayList) + { + var bikes = d?.itemList + if(bikes != null) + { + var subList = bikes.filter { it.isSelect } + subList?.forEach { list.add(it) } + } + + if(d?.children != null) + { + for(c in d.children) + { + addItemCars(c, list) + } + } + + } + + /** + * 重置车辆选择状态为未选择 + */ + private fun resetItemCarSelect(d: Folder?) + { + d?.isSelect = false + + d?.children?.forEach{ + it.isSelect = false + resetItemCarSelect(it) + } + + d?.itemList?.forEach { + it.isSelect = false + } + } + + public interface OnFilterListener + { + public fun onSure() + public fun onClose() + } + + companion object{ + /** + * 判断父节点是否全选 + */ + fun adjustParentIsCheckAll(node: TreeNode<*>) + { + var parent = node.parent + if(parent != null) + { + var content = parent?.content as? Folder + var child = content?.children + var bikes = content?.itemList + var res = true + if(child != null) + { + for(c in child) + { + res = res && c.isSelect + if(!res) + { + break + } + } + } + + if(res) { + if (bikes != null) { + for (b in bikes) { + res = res && b.isSelect + if (!res) { + break + } + } + } + } + + content?.isSelect = res + adjustParentIsCheckAll(parent) + } + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/tellh/com/recyclertreeview/viewbinder/DirectoryNodeBinder.java b/app/src/main/java/tellh/com/recyclertreeview/viewbinder/DirectoryNodeBinder.java deleted file mode 100644 index 4708b31..0000000 --- a/app/src/main/java/tellh/com/recyclertreeview/viewbinder/DirectoryNodeBinder.java +++ /dev/null @@ -1,58 +0,0 @@ -package tellh.com.recyclertreeview.viewbinder; - -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import tellh.com.recyclertreeview.R; -import tellh.com.recyclertreeview.bean.Dir; -import tellh.com.recyclertreeview_lib.TreeNode; -import tellh.com.recyclertreeview_lib.TreeViewBinder; - -/** - * Created by tlh on 2016/10/1 :) - */ - -public class DirectoryNodeBinder extends TreeViewBinder { - @Override - public ViewHolder provideViewHolder(View itemView) { - return new ViewHolder(itemView); - } - - @Override - public void bindView(ViewHolder holder, int position, TreeNode node) { - holder.ivArrow.setRotation(0); - holder.ivArrow.setImageResource(R.drawable.ic_keyboard_arrow_right_black_18dp); - int rotateDegree = node.isExpand() ? 90 : 0; - holder.ivArrow.setRotation(rotateDegree); - Dir dirNode = (Dir) node.getContent(); - holder.tvName.setText(dirNode.dirName); - if (node.isLeaf()) - holder.ivArrow.setVisibility(View.INVISIBLE); - else holder.ivArrow.setVisibility(View.VISIBLE); - } - - @Override - public int getLayoutId() { - return R.layout.item_dir; - } - - public static class ViewHolder extends TreeViewBinder.ViewHolder { - private ImageView ivArrow; - private TextView tvName; - - public ViewHolder(View rootView) { - super(rootView); - this.ivArrow = (ImageView) rootView.findViewById(R.id.iv_arrow); - this.tvName = (TextView) rootView.findViewById(R.id.tv_name); - } - - public ImageView getIvArrow() { - return ivArrow; - } - - public TextView getTvName() { - return tvName; - } - } -} diff --git a/app/src/main/java/tellh/com/recyclertreeview/viewbinder/FileBinder.kt b/app/src/main/java/tellh/com/recyclertreeview/viewbinder/FileBinder.kt new file mode 100644 index 0000000..89139d0 --- /dev/null +++ b/app/src/main/java/tellh/com/recyclertreeview/viewbinder/FileBinder.kt @@ -0,0 +1,61 @@ +package com.nlinks.minielectric_helper_android.module.message + +import android.support.v7.widget.RecyclerView +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import tellh.com.recyclertreeview.view.SelectTreeView +import tellh.com.recyclertreeview.R +import tellh.com.recyclertreeview.bean.File +import tellh.com.recyclertreeview_lib.TreeNode +import tellh.com.recyclertreeview_lib.TreeViewBinder + +/** + * 项目名称:minielectric-helper-android + * 类描述: + * @author hxiaohui0@linewell.com + * 创建时间:2019/10/22 0022 下午 4:54 + */ +class FileBinder(var rv: RecyclerView): TreeViewBinder() +{ + override fun bindView(holder: ViewHolder, position: Int, node: TreeNode<*>) { + var data = (node.content as? File) + if(data?.isSelect == true) + { + holder.iv_select.setImageResource(R.drawable.icon_xuanze) + }else + { + holder.iv_select.setImageResource(R.drawable.icon_weixuan) + } + + holder.itemView.setOnClickListener(object:View.OnClickListener{ + override fun onClick(p0: View?) { + data?.isSelect = !data?.isSelect!! + SelectTreeView.adjustParentIsCheckAll(node) + rv.adapter?.notifyDataSetChanged() + } + + }) + holder.tv_item.text = data?.name + } + + + + override fun getLayoutId(): Int { + return R.layout.item_list + } + + override fun provideViewHolder(itemView: View?): ViewHolder { + return ViewHolder(itemView!!) + } + + class ViewHolder(view: View): RecyclerView.ViewHolder(view) + { + lateinit var tv_item:TextView + lateinit var iv_select:ImageView + init { + tv_item = view.findViewById(R.id.tv_item) + iv_select = view.findViewById(R.id.iv_select) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/tellh/com/recyclertreeview/viewbinder/FileNodeBinder.java b/app/src/main/java/tellh/com/recyclertreeview/viewbinder/FileNodeBinder.java deleted file mode 100644 index ebb2dd6..0000000 --- a/app/src/main/java/tellh/com/recyclertreeview/viewbinder/FileNodeBinder.java +++ /dev/null @@ -1,41 +0,0 @@ -package tellh.com.recyclertreeview.viewbinder; - -import android.view.View; -import android.widget.TextView; - -import tellh.com.recyclertreeview.R; -import tellh.com.recyclertreeview.bean.File; -import tellh.com.recyclertreeview_lib.TreeNode; -import tellh.com.recyclertreeview_lib.TreeViewBinder; - -/** - * Created by tlh on 2016/10/1 :) - */ - -public class FileNodeBinder extends TreeViewBinder { - @Override - public ViewHolder provideViewHolder(View itemView) { - return new ViewHolder(itemView); - } - - @Override - public void bindView(ViewHolder holder, int position, TreeNode node) { - File fileNode = (File) node.getContent(); - holder.tvName.setText(fileNode.fileName); - } - - @Override - public int getLayoutId() { - return R.layout.item_file; - } - - public class ViewHolder extends TreeViewBinder.ViewHolder { - public TextView tvName; - - public ViewHolder(View rootView) { - super(rootView); - this.tvName = (TextView) rootView.findViewById(R.id.tv_name); - } - - } -} diff --git a/app/src/main/java/tellh/com/recyclertreeview/viewbinder/FolderBinder.kt b/app/src/main/java/tellh/com/recyclertreeview/viewbinder/FolderBinder.kt new file mode 100644 index 0000000..20093f3 --- /dev/null +++ b/app/src/main/java/tellh/com/recyclertreeview/viewbinder/FolderBinder.kt @@ -0,0 +1,89 @@ +package com.nlinks.minielectric_helper_android.module.message + +import android.support.v7.widget.RecyclerView +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import tellh.com.recyclertreeview.view.SelectTreeView +import tellh.com.recyclertreeview.R +import tellh.com.recyclertreeview.bean.Folder +import tellh.com.recyclertreeview.util.UIUtils +import tellh.com.recyclertreeview_lib.TreeNode +import tellh.com.recyclertreeview_lib.TreeViewBinder + + +class FolderBinder(var rv: RecyclerView): TreeViewBinder() +{ + override fun bindView(holder: ViewHolder, position: Int, node: TreeNode<*>) { + var data = node.content as? Folder + if(data?.isSelect == true) + { + var dra = UIUtils.getDrawableWithSize(R.drawable.icon_xuanze) + holder.tv_select.setCompoundDrawables(null, null, dra, null) + }else + { + var dra = UIUtils.getDrawableWithSize(R.drawable.icon_weixuan) + holder.tv_select.setCompoundDrawables(null, null, dra, null) + } + holder.tv_carshop_name.text = data?.name + holder.iv_arrow.rotation = 0f + val rotateDegree = if (node.isExpand) 90f else 0f + holder.iv_arrow.rotation = rotateDegree + + holder.tv_select.setOnClickListener(object:View.OnClickListener{ + override fun onClick(p0: View?) { + data?.isSelect = !data?.isSelect!! + reverseAllChildSelect(data, data?.isSelect) + SelectTreeView.adjustParentIsCheckAll(node) + var iii = 0 + rv?.adapter?.notifyDataSetChanged() + } + + }) + + } + + private fun reverseAllChildSelect(data: Folder, select:Boolean) { + data?.isSelect = select + var child = data?.children + var bikeList = data?.itemList + if(child != null ) + { + for(c in child) + { + reverseAllChildSelect(c, select) + c.isSelect = select + } + } + + if(bikeList != null) + { + for(b in bikeList) + { + b.isSelect = select + } + } + + + } + + override fun getLayoutId(): Int { + return R.layout.item_folder + } + + override fun provideViewHolder(itemView: View?): ViewHolder { + return ViewHolder(itemView!!) + } + + class ViewHolder(view: View):RecyclerView.ViewHolder(view) + { + lateinit var iv_arrow:ImageView + lateinit var tv_carshop_name:TextView + lateinit var tv_select:TextView + init { + iv_arrow = view?.findViewById(R.id.iv_arrow) + tv_carshop_name = view?.findViewById(R.id.tv_carshop_name) + tv_select = view?.findViewById(R.id.tv_select) + } + } +} \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/ic_folder_light_blue_700_24dp.png b/app/src/main/res/drawable-hdpi/ic_folder_light_blue_700_24dp.png deleted file mode 100644 index 0aa6c25..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_folder_light_blue_700_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/ic_insert_drive_file_light_blue_700_24dp.png b/app/src/main/res/drawable-hdpi/ic_insert_drive_file_light_blue_700_24dp.png deleted file mode 100644 index 4d5a18c..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_insert_drive_file_light_blue_700_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-hdpi/ic_keyboard_arrow_right_black_18dp.png b/app/src/main/res/drawable-hdpi/ic_keyboard_arrow_right_black_18dp.png deleted file mode 100644 index 10800e0..0000000 Binary files a/app/src/main/res/drawable-hdpi/ic_keyboard_arrow_right_black_18dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_folder_light_blue_700_24dp.png b/app/src/main/res/drawable-mdpi/ic_folder_light_blue_700_24dp.png deleted file mode 100644 index 58f99ee..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_folder_light_blue_700_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_insert_drive_file_light_blue_700_24dp.png b/app/src/main/res/drawable-mdpi/ic_insert_drive_file_light_blue_700_24dp.png deleted file mode 100644 index 210b5c5..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_insert_drive_file_light_blue_700_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/ic_keyboard_arrow_right_black_18dp.png b/app/src/main/res/drawable-mdpi/ic_keyboard_arrow_right_black_18dp.png deleted file mode 100644 index 8d9ab0e..0000000 Binary files a/app/src/main/res/drawable-mdpi/ic_keyboard_arrow_right_black_18dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/empty_normal.png b/app/src/main/res/drawable-xhdpi/empty_normal.png new file mode 100644 index 0000000..5603f0a Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/empty_normal.png differ diff --git a/app/src/main/res/drawable-xhdpi/ic_folder_light_blue_700_24dp.png b/app/src/main/res/drawable-xhdpi/ic_folder_light_blue_700_24dp.png deleted file mode 100644 index 441d303..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_folder_light_blue_700_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_insert_drive_file_light_blue_700_24dp.png b/app/src/main/res/drawable-xhdpi/ic_insert_drive_file_light_blue_700_24dp.png deleted file mode 100644 index f629afe..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_insert_drive_file_light_blue_700_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/ic_keyboard_arrow_right_black_18dp.png b/app/src/main/res/drawable-xhdpi/ic_keyboard_arrow_right_black_18dp.png deleted file mode 100644 index 1966d47..0000000 Binary files a/app/src/main/res/drawable-xhdpi/ic_keyboard_arrow_right_black_18dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/icon_node_no_expand.png b/app/src/main/res/drawable-xhdpi/icon_node_no_expand.png new file mode 100644 index 0000000..c6b9070 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_node_no_expand.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_weixuan.png b/app/src/main/res/drawable-xhdpi/icon_weixuan.png new file mode 100644 index 0000000..713f312 Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_weixuan.png differ diff --git a/app/src/main/res/drawable-xhdpi/icon_xuanze.png b/app/src/main/res/drawable-xhdpi/icon_xuanze.png new file mode 100644 index 0000000..35983df Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/icon_xuanze.png differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_folder_light_blue_700_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_folder_light_blue_700_24dp.png deleted file mode 100644 index aec90f0..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_folder_light_blue_700_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_insert_drive_file_light_blue_700_24dp.png b/app/src/main/res/drawable-xxhdpi/ic_insert_drive_file_light_blue_700_24dp.png deleted file mode 100644 index 8b601fd..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_insert_drive_file_light_blue_700_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_right_black_18dp.png b/app/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_right_black_18dp.png deleted file mode 100644 index 414f2f9..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_keyboard_arrow_right_black_18dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/ic_menu_delete.png b/app/src/main/res/drawable-xxhdpi/ic_menu_delete.png deleted file mode 100644 index 8e9e78d..0000000 Binary files a/app/src/main/res/drawable-xxhdpi/ic_menu_delete.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_folder_light_blue_700_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_folder_light_blue_700_24dp.png deleted file mode 100644 index c79360b..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_folder_light_blue_700_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_insert_drive_file_light_blue_700_24dp.png b/app/src/main/res/drawable-xxxhdpi/ic_insert_drive_file_light_blue_700_24dp.png deleted file mode 100644 index cac36dd..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_insert_drive_file_light_blue_700_24dp.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_right_black_18dp.png b/app/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_right_black_18dp.png deleted file mode 100644 index 01191c7..0000000 Binary files a/app/src/main/res/drawable-xxxhdpi/ic_keyboard_arrow_right_black_18dp.png and /dev/null differ diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 869486d..7146b96 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,8 +1,15 @@ - + android:orientation="vertical" + > + + + + + diff --git a/app/src/main/res/layout/item_dir.xml b/app/src/main/res/layout/item_dir.xml deleted file mode 100644 index 0f2c4e8..0000000 --- a/app/src/main/res/layout/item_dir.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_file.xml b/app/src/main/res/layout/item_file.xml deleted file mode 100644 index f0e0995..0000000 --- a/app/src/main/res/layout/item_file.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/item_folder.xml b/app/src/main/res/layout/item_folder.xml new file mode 100644 index 0000000..44b90bc --- /dev/null +++ b/app/src/main/res/layout/item_folder.xml @@ -0,0 +1,52 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml new file mode 100644 index 0000000..aa55fd0 --- /dev/null +++ b/app/src/main/res/layout/item_list.xml @@ -0,0 +1,28 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_empty_list.xml b/app/src/main/res/layout/layout_empty_list.xml new file mode 100644 index 0000000..059ae96 --- /dev/null +++ b/app/src/main/res/layout/layout_empty_list.xml @@ -0,0 +1,21 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/layout_select_view.xml b/app/src/main/res/layout/layout_select_view.xml new file mode 100644 index 0000000..466dede --- /dev/null +++ b/app/src/main/res/layout/layout_select_view.xml @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/app/src/main/res/menu/menu_main.xml b/app/src/main/res/menu/menu_main.xml deleted file mode 100644 index e888dcd..0000000 --- a/app/src/main/res/menu/menu_main.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/values-w820dp/dimens.xml b/app/src/main/res/values-w820dp/dimens.xml deleted file mode 100644 index 63fc816..0000000 --- a/app/src/main/res/values-w820dp/dimens.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - 64dp - diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 3ab3e9c..91a05da 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -3,4 +3,8 @@ #3F51B5 #303F9F #FF4081 + + #35476b + #FF50B1E4 + #FFFFFFFF diff --git a/build.gradle b/build.gradle index 987db10..14de3ee 100644 --- a/build.gradle +++ b/build.gradle @@ -1,13 +1,16 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { + ext.kotlin_version = '1.3.41' repositories { jcenter() + google() } dependencies { //JitPack classpath 'com.github.dcendents:android-maven-gradle-plugin:1.4.1' - classpath 'com.android.tools.build:gradle:3.0.1' + classpath 'com.android.tools.build:gradle:3.5.1' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fc9b829..e0a5bff 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Mon Dec 28 10:00:20 PST 2015 +#Wed Nov 13 10:00:44 CST 2019 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip diff --git a/recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeNode.java b/recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeNode.java index 02f6741..87b7966 100644 --- a/recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeNode.java +++ b/recyclertreeview-lib/src/main/java/tellh/com/recyclertreeview_lib/TreeNode.java @@ -27,7 +27,7 @@ public TreeNode(@NonNull T content) { public int getHeight() { if (isRoot()) - height = 0; + height = -1; else if (height == UNDEFINE) height = parent.getHeight() + 1; return height;