bmelnychuk / AndroidTreeView

AndroidTreeView. TreeView implementation for android
Apache License 2.0
3k stars 621 forks source link

How can I use a TreeView in a MaterialDialog? #84

Open adryx92 opened 8 years ago

adryx92 commented 8 years ago

Hello, I'm quite new to Android development. I'd like to insert an AndroidTreeView in a custom dialog. I'm using this nice lib to create dialogs with custom layouts.

My test code is:

TreeNode root = TreeNode.root();
TreeNode parent = new TreeNode("MyParentNode");
TreeNode child0 = new TreeNode("ChildNode0");
TreeNode child1 = new TreeNode("ChildNode1");
parent.addChildren(child0, child1);
root.addChild(parent);

AndroidTreeView tView = new AndroidTreeView(this, root);
//containerView.addView(tView.getView());

MaterialDialog dialog = new MaterialDialog.Builder(MainActivity.this)
.title("Menu")
.customView(R.layout.menu_view, true)
.build();

and the definition of my menu_view has nothing except an id. What can I do then? How do I set the custom view before adding it to the dialog?

Thanks

adryx92 commented 8 years ago

Finally solved this way:

...
AndroidTreeView tView = new AndroidTreeView(this, root);

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.menu_view, null);
ViewGroup containerView = (ViewGroup) view.findViewById(R.id.container);

MaterialDialog dialog = new MaterialDialog.Builder(MainActivity.this)
     .title("Menu")
     .customView(containerView, true)
     .build();
dialog.show(); 

Thanks anyway.

adryx92 commented 8 years ago

Hello, I've got another issue. I'm trying to represent my TreeView as the TwoDScrollingArrowExpandFragment from your sample. I create my TreeNode like this, passing your two Objects:

TreeNode tn1 = new TreeNode(new IconTreeItemHolder.IconTreeItem(R.string.ic_folder, pm1.toString())).setViewHolder(new ArrowExpandSelectableHeaderHolder(this));

but I get a runtime exception. Here's my stacktrace:

E: FATAL EXCEPTION: main
   android.view.InflateException: Binary XML file line #19: Error inflating class com.github.johnkil.print.PrintView
       at android.view.LayoutInflater.createView(LayoutInflater.java:606)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680)
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:739)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:489)
       at android.view.LayoutInflater.inflate(LayoutInflater.java:396)
       at com.adryx.myapp.Layout.holder.ArrowExpandSelectableHeaderHolder.createNodeView(ArrowExpandSelectableHeaderHolder.java:30)
       at com.adryx.myapp.Layout.holder.ArrowExpandSelectableHeaderHolder.createNodeView(ArrowExpandSelectableHeaderHolder.java:18)
       at com.unnamed.b.atv.model.TreeNode$BaseNodeViewHolder.getNodeView(TreeNode.java:258)
       at com.unnamed.b.atv.model.TreeNode$BaseNodeViewHolder.getView(TreeNode.java:237)
       at com.unnamed.b.atv.view.AndroidTreeView.addNode(AndroidTreeView.java:258)
       at com.unnamed.b.atv.view.AndroidTreeView.expandNode(AndroidTreeView.java:241)
       at com.unnamed.b.atv.view.AndroidTreeView.getView(AndroidTreeView.java:137)
       at com.unnamed.b.atv.view.AndroidTreeView.getView(AndroidTreeView.java:142)
       at com.adryx.myapp.Layout.MainActivity.showMenu(MainActivity.java:666)
       at com.adryx.myapp.Layout.MainActivity.onOptionsItemSelected(MainActivity.java:613)
       at android.app.Activity.onMenuItemSelected(Activity.java:2506)
       at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:421)
       at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:188)
       at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103)
       at android.support.v7.app.AppCompatDelegateImplV7.onMenuItemSelected(AppCompatDelegateImplV7.java:663)
       at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810)
       at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152)
       at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957)
       at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:947)
       at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618)
       at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:155)
       at android.view.View.performClick(View.java:3620)
       at android.view.View$PerformClick.run(View.java:14322)
       at android.os.Handler.handleCallback(Handler.java:605)
       at android.os.Handler.dispatchMessage(Handler.java:92)
       at android.os.Looper.loop(Looper.java:137)
       at android.app.ActivityThread.main(ActivityThread.java:4507)
       at java.lang.reflect.Method.invokeNative(Native Method)
       at java.lang.reflect.Method.invoke(Method.java:511)
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978)
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745)
       at dalvik.system.NativeStart.main(Native Method)
    Caused by: java.lang.reflect.InvocationTargetException
       at java.lang.reflect.Constructor.constructNative(Native Method)
       at java.lang.reflect.Constructor.newInstance(Constructor.java:417)
       at android.view.LayoutInflater.createView(LayoutInflater.java:586)
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
       at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
       at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
       at com.adryx.myapp.Layout.holder.ArrowExpandSelectableHeaderHolder.createNodeView(ArrowExpandSelectableHeaderHolder.java:30) 
       at com.adryx.myapp.Layout.holder.ArrowExpandSelectableHeaderHolder.createNodeView(ArrowExpandSelectableHeaderHolder.java:18) 
       at com.unnamed.b.atv.model.TreeNode$BaseNodeViewHolder.getNodeView(TreeNode.java:258) 
       at com.unnamed.b.atv.model.TreeNode$BaseNodeViewHolder.getView(TreeNode.java:237) 
       at com.unnamed.b.atv.view.AndroidTreeView.addNode(AndroidTreeView.java:258) 
       at com.unnamed.b.atv.view.AndroidTreeView.expandNode(AndroidTreeView.java:241) 
       at com.unnamed.b.atv.view.AndroidTreeView.getView(AndroidTreeView.java:137) 
       at com.unnamed.b.atv.view.AndroidTreeView.getView(AndroidTreeView.java:142) 
       at com.adryx.myapp.Layout.MainActivity.showMenu(MainActivity.java:666) 
       at com.adryx.myapp.Layout.MainActivity.onOptionsItemSelected(MainActivity.java:613) 
       at android.app.Activity.onMenuItemSelected(Activity.java:2506) 
       at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:421) 
       at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:188) 
       at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) 
       at android.support.v7.app.AppCompatDelegateImplV7.onMenuItemSelected(AppCompatDelegateImplV7.java:663) 
       at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810) 
       at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
       at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957) 
       at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:947) 
       at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618) 
       at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:155) 
       at android.view.View.performClick(View.java:3620) 
       at android.view.View$PerformClick.run(View.java:14322) 
       at android.os.Handler.handleCallback(Handler.java:605) 
       at android.os.Handler.dispatchMessage(Handler.java:92) 
       at android.os.Looper.loop(Looper.java:137) 
       at android.app.ActivityThread.main(ActivityThread.java:4507) 
       at java.lang.reflect.Method.invokeNative(Native Method) 
       at java.lang.reflect.Method.invoke(Method.java:511) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745) 
       at dalvik.system.NativeStart.main(Native Method) 
    Caused by: java.lang.RuntimeException: native typeface cannot be made
       at android.graphics.Typeface.<init>(Typeface.java:245)
       at android.graphics.Typeface.createFromAsset(Typeface.java:219)
       at com.github.johnkil.print.TypefaceManager.load(TypefaceManager.java:48)
       at com.github.johnkil.print.PrintViewUtils.initIcon(PrintViewUtils.java:54)
       at com.github.johnkil.print.PrintView.init(PrintView.java:60)
       at com.github.johnkil.print.PrintView.<init>(PrintView.java:45)
       at java.lang.reflect.Constructor.constructNative(Native Method) 
       at java.lang.reflect.Constructor.newInstance(Constructor.java:417) 
       at android.view.LayoutInflater.createView(LayoutInflater.java:586) 
       at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:680) 
       at android.view.LayoutInflater.rInflate(LayoutInflater.java:739) 
       at android.view.LayoutInflater.inflate(LayoutInflater.java:489) 
       at android.view.LayoutInflater.inflate(LayoutInflater.java:396) 
       at com.adryx.myapp.Layout.holder.ArrowExpandSelectableHeaderHolder.createNodeView(ArrowExpandSelectableHeaderHolder.java:30) 
       at com.adryx.myapp.Layout.holder.ArrowExpandSelectableHeaderHolder.createNodeView(ArrowExpandSelectableHeaderHolder.java:18) 
       at com.unnamed.b.atv.model.TreeNode$BaseNodeViewHolder.getNodeView(TreeNode.java:258) 
       at com.unnamed.b.atv.model.TreeNode$BaseNodeViewHolder.getView(TreeNode.java:237) 
       at com.unnamed.b.atv.view.AndroidTreeView.addNode(AndroidTreeView.java:258) 
       at com.unnamed.b.atv.view.AndroidTreeView.expandNode(AndroidTreeView.java:241) 
       at com.unnamed.b.atv.view.AndroidTreeView.getView(AndroidTreeView.java:137) 
       at com.unnamed.b.atv.view.AndroidTreeView.getView(AndroidTreeView.java:142) 
       at com.adryx.myapp.Layout.MainActivity.showMenu(MainActivity.java:666) 
       at com.adryx.myapp.Layout.MainActivity.onOptionsItemSelected(MainActivity.java:613) 
       at android.app.Activity.onMenuItemSelected(Activity.java:2506) 
       at android.support.v4.app.FragmentActivity.onMenuItemSelected(FragmentActivity.java:421) 
       at android.support.v7.app.AppCompatActivity.onMenuItemSelected(AppCompatActivity.java:188) 
       at android.support.v7.view.WindowCallbackWrapper.onMenuItemSelected(WindowCallbackWrapper.java:103) 
       at android.support.v7.app.AppCompatDelegateImplV7.onMenuItemSelected(AppCompatDelegateImplV7.java:663) 
       at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:810) 
       at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
       at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:957) 
       at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:947) 
       at android.support.v7.widget.ActionMenuView.invokeItem(ActionMenuView.java:618) 
       at android.support.v7.view.menu.ActionMenuItemView.onClick(ActionMenuItemView.java:155) 
       at android.view.View.performClick(View.java:3620) 
       at android.view.View$PerformClick.run(View.java:14322) 
       at android.os.Handler.handleCallback(Handler.java:605) 
       at android.os.Handler.dispatchMessage(Handler.java:92) 
       at android.os.Looper.loop(Looper.java:137) 
       at android.app.ActivityThread.main(ActivityThread.java:4507) 
       at java.lang.reflect.Method.invokeNative(Native Method) 
       at java.lang.reflect.Method.invoke(Method.java:511) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:978) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:745) 
       at dalvik.system.NativeStart.main(Native Method) 

I think there's some layout problem. Can you please help me?

bmelnychuk commented 8 years ago

Looks like this is dependency issue, I used PrintView (https://github.com/johnkil/Print) to display icons from font

adryx92 commented 8 years ago

Never mind, I created my own custom layout.