Skip to content

Missing features #83

New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Open
wants to merge 5 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,8 @@ Tree view implementation for android
+ 3. Save state after rotation
+ 4. Selection mode for nodes
+ 5. Dynamic add/remove node
+ 6. Auto scroll to selected leaf
+ 7. Auto scroll to expanded node

### Known Limitations
+ For Android 4.0 (+/- nearest version) if you have too deep view hierarchy and with tree its easily possible, your app may crash
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
import com.unnamed.b.atv.sample.fragment.FolderStructureFragment;
import com.unnamed.b.atv.sample.fragment.SelectableTreeFragment;
import com.unnamed.b.atv.sample.fragment.TwoDScrollingArrowExpandFragment;
import com.unnamed.b.atv.sample.fragment.TwoDScrollingArrowExpandNodeFragment;
import com.unnamed.b.atv.sample.fragment.TwoDScrollingFragment;

import java.util.ArrayList;
Expand All @@ -36,6 +37,7 @@ protected void onCreate(Bundle savedInstanceState) {
listItems.put("Selectable Nodes", SelectableTreeFragment.class);
listItems.put("2d scrolling", TwoDScrollingFragment.class);
listItems.put("Expand with arrow only", TwoDScrollingArrowExpandFragment.class);
listItems.put("Expand with arrow one node only", TwoDScrollingArrowExpandNodeFragment.class);


final List<String> list = new ArrayList(listItems.keySet());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
tView.setDefaultNodeClickListener(TwoDScrollingArrowExpandFragment.this);
tView.setDefaultViewHolder(ArrowExpandSelectableHeaderHolder.class);
containerView.addView(tView.getView());
tView.setUseAutoToggle(false);
tView.setExpansionAutoToggle(false);

tView.expandAll();

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
package com.unnamed.b.atv.sample.fragment;

import android.app.Fragment;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;

import com.unnamed.b.atv.model.TreeNode;
import com.unnamed.b.atv.sample.R;
import com.unnamed.b.atv.sample.holder.ArrowExpandSelectableHeaderHolder;
import com.unnamed.b.atv.sample.holder.IconTreeItemHolder;
import com.unnamed.b.atv.view.AndroidTreeView;

/**
* Created by Bogdan Melnychuk on 2/12/15 modified by Szigeti Peter 2/2/16.
*/
public class TwoDScrollingArrowExpandNodeFragment extends Fragment implements TreeNode.TreeNodeClickListener{
private static final String NAME = "Very long name for folder";
private AndroidTreeView tView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_selectable_nodes, null, false);
rootView.findViewById(R.id.status).setVisibility(View.GONE);
ViewGroup containerView = (ViewGroup) rootView.findViewById(R.id.container);

TreeNode root = TreeNode.root();

TreeNode s1 = new TreeNode(new IconTreeItemHolder.IconTreeItem(R.string.ic_folder, "Folder with very long name ")).setViewHolder(
new ArrowExpandSelectableHeaderHolder(getActivity()));
TreeNode s2 = new TreeNode(new IconTreeItemHolder.IconTreeItem(R.string.ic_folder, "Another folder with very long name")).setViewHolder(
new ArrowExpandSelectableHeaderHolder(getActivity()));

fillFolder(s1);
TreeNode nodeToExpand = fillFolder(s2);

root.addChildren(s1, s2);

tView = new AndroidTreeView(getActivity(), root);
tView.setDefaultAnimation(true);
tView.setUse2dScroll(true);
tView.setDefaultContainerStyle(R.style.TreeNodeStyleCustom);
tView.setDefaultNodeClickListener(TwoDScrollingArrowExpandNodeFragment.this);
tView.setDefaultViewHolder(ArrowExpandSelectableHeaderHolder.class);
containerView.addView(tView.getView());

tView.setAutoScrollToExpandedNode(true);
tView.setAutoScrollToSelectedLeafs(true);
tView.setLeafSelectionAutoToggle(true);

tView.expandNode(s1);
tView.expandNodeIncludingParents(nodeToExpand, true);

if (savedInstanceState != null) {
String state = savedInstanceState.getString("tState");
if (!TextUtils.isEmpty(state)) {
tView.restoreState(state);
}
}
return rootView;
}

private TreeNode fillFolder(TreeNode folder) {
TreeNode currentNode = folder;
TreeNode file = null;
for (int i = 0; i < 6; i++) {
file = new TreeNode(new IconTreeItemHolder.IconTreeItem(R.string.ic_folder, NAME + " " + i));
currentNode.addChild(file);
currentNode = file;
}
return file;
}

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("tState", tView.getSaveState());
}

@Override
public void onClick(TreeNode node, Object value) {
Toast toast = Toast.makeText(getActivity(), ((IconTreeItemHolder.IconTreeItem)value).text, Toast.LENGTH_SHORT);
toast.show();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ public View createNodeView(final TreeNode node, IconTreeItemHolder.IconTreeItem
arrowView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
tView.toggleNode(node);
tView.toggleNodeExpansion(node);
}
});

Expand Down
Empty file.
26 changes: 26 additions & 0 deletions library/src/main/java/com/unnamed/b/atv/model/TreeNode.java
100644 → 100755
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.unnamed.b.atv.model;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

Expand Down Expand Up @@ -97,6 +98,10 @@ public boolean isLeaf() {
return size() == 0;
}

public boolean isBranch() {
return size() > 0;
}

public Object getValue() {
return mValue;
}
Expand All @@ -112,6 +117,9 @@ public TreeNode setExpanded(boolean expanded) {

public void setSelected(boolean selected) {
mSelected = selected;
if(mViewHolder != null) {
mViewHolder.toggleSelection(mSelected);
}
}

public boolean isSelected() {
Expand Down Expand Up @@ -191,6 +199,18 @@ public BaseNodeViewHolder getViewHolder() {
return mViewHolder;
}

public boolean isInitialized() {
return mViewHolder != null ? mViewHolder.isInitialized() : false;
}

public View getView() {
return mViewHolder != null ? mViewHolder.getView() : null;
}

public Boolean hasView() {
return getView() != null;
}

public boolean isFirstChild() {
if (!isRoot()) {
List<TreeNode> parentChildren = mParent.children;
Expand Down Expand Up @@ -225,9 +245,11 @@ public static abstract class BaseNodeViewHolder<E> {
private View mView;
protected int containerStyle;
protected Context context;
protected LayoutInflater layoutInflater;

public BaseNodeViewHolder(Context context) {
this.context = context;
this.layoutInflater = LayoutInflater.from(context);
}

public View getView() {
Expand Down Expand Up @@ -280,5 +302,9 @@ public void toggle(boolean active) {
public void toggleSelectionMode(boolean editModeEnabled) {
// empty
}

public void toggleSelection(boolean isSelected) {

}
}
}
Loading