TreeView icon indicating copy to clipboard operation
TreeView copied to clipboard

Use this library

Open polo2169 opened this issue 3 years ago • 7 comments

Hi, I'm a beginner in java and I would like to use this library but I don't understand how to use it. The example is half explained, for example I don't understand what are the parent and child layouts. If you have just a working example it would help me a lot! Thanks

polo2169 avatar Jun 14 '22 04:06 polo2169

Hello @polo2169,

First welcome to java and TreeView😄

I don't understand what are the parent and child layouts.

The tree is represented as roots and subnodes for example

- directory 1
  - file 1
  - directory 2
    - file 2 

Directory 1 node is a parent and has 2 children (file 1, directory 2) and directory 2 is also a parent of one child who is file 2, so to create this in java after creating 4 nodes you need to set the relation between them, so add file 2 node as a child in directory 2, and then add file 1 and directory 2 as children in directory 2

TreeNode directory1 = new TreeNode("Directory 1", R.layout.directory);
TreeNode directory2 = new TreeNode("Directory 2", R.layout.directory);
TreeNode file1 = new TreeNode("File 1", R.layout.file);
TreeNode file2 = new TreeNode("File 2", R.layout.file);

directory2.addChild(file2);
directory1.addChild(file1);
directory1.addChild(directory2);

This is how to use TreeView basically, if you have any problem with any example we can discuss it.

Thanks Amr Hesham

AmrDeveloper avatar Jun 14 '22 17:06 AmrDeveloper

Hi @AmrDeveloper, Thanks for your answer, unfortunately it doesn't work any better. The editor says "add String to first parameter to the constructor". I think I defined some things wrong but I followed the example. image

polo2169 avatar Jun 16 '22 04:06 polo2169

It weird @polo2169,

Make sure you used this import

import com.amrdeveloper.treeview.TreeNode;

Can you please write the error message in this line

treeViewAdapter.updateTreeNodes(roots);

AmrDeveloper avatar Jun 16 '22 06:06 AmrDeveloper

you are right I had the wrong import :/ I don't have any more errors! However, nothing is displayed during my test... I don't understand what I have to put in the layout R.layout.list_item_one I'm sorry I don't understand ahah

package fr.pdego.treeview2;

import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.RecyclerView;


import android.os.Bundle;

import com.amrdeveloper.treeview.TreeNode;
import com.amrdeveloper.treeview.TreeViewAdapter;
import com.amrdeveloper.treeview.TreeViewHolderFactory;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {
RecyclerView recyclerView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        recyclerView=findViewById(R.id.recycler_view);
        TreeViewHolderFactory factory = (v, layout) -> {
            if (layout == R.layout.directory) return new CustomViewHolderOne(v);
            else if (layout == R.layout.file) return new CustomViewHolderTwo(v);
            else return new CustomViewHolderThree(v);
        };
        TreeViewAdapter treeViewAdapter = new TreeViewAdapter(factory);
        recyclerView.setAdapter(treeViewAdapter);
        TreeNode root1 = new TreeNode("Root1", R.layout.directory);
        root1.addChild(new TreeNode("Child1", R.layout.file));
        root1.addChild(new TreeNode("Child2", R.layout.file));

        List<TreeNode> roots = new ArrayList<>();
        roots.add(root1);

        treeViewAdapter.updateTreeNodes(roots);
    }
}

My view Holder

package fr.pdego.treeview2;

import android.view.View;

import androidx.annotation.NonNull;

import com.amrdeveloper.treeview.TreeNode;
import com.amrdeveloper.treeview.TreeViewHolder;

public class CustomViewHolderOne extends TreeViewHolder {

    public CustomViewHolderOne(@NonNull View itemView) {
        super(itemView);
    }

    @Override
    public void bindTreeNode(TreeNode node) {
        super.bindTreeNode(node);
        // Here you can bind your node and check if it selected or not
    }
}

My layouts

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_centerVertical="true"
    android:paddingLeft="10dp"
    android:paddingRight="10dp"
    android:paddingTop="10dp"
    android:paddingBottom="10dp">

    <ImageView
        android:id="@+id/image"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_folder" />

    <TextView
        android:id="@+id/text"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_toRightOf="@id/image"
        android:text="List Item"
        android:textAppearance="@style/Base.TextAppearance.AppCompat.Small"
        android:textStyle="bold" />
</RelativeLayout>

Thank you for all your help!

polo2169 avatar Jun 16 '22 07:06 polo2169

First of all roots should add to the roots list so if you want to show Directories 1 and 2 add them to the list

roots.add(directory1);
roots.add(directory2);

Then in your view holder, you should update the text view to show the value for example, think of it as an adapter

package fr.pdego.treeview2;

import android.view.View;

import androidx.annotation.NonNull;

import com.amrdeveloper.treeview.TreeNode;
import com.amrdeveloper.treeview.TreeViewHolder;

public class CustomViewHolderOne extends TreeViewHolder {

    private TextView text;

    public CustomViewHolderOne(@NonNull View itemView) {
        super(itemView);
        text = itemView.findViewById(R.id.text);
    }

    @Override
    public void bindTreeNode(TreeNode node) {
        super.bindTreeNode(node);
        text.setText(node.getValue().toString());
    }
}

After your first example work well, I suggest to run the example app and play with it to see the features, and if you have any question please feel free to ask

AmrDeveloper avatar Jun 16 '22 08:06 AmrDeveloper

I did it! Thank you so much for your help and for this really nice project!

polo2169 avatar Jun 17 '22 07:06 polo2169

@polo2169 You're most welcome :D, enjoy using it

AmrDeveloper avatar Jun 17 '22 13:06 AmrDeveloper