0

Я использую ExpandableListView, расширяющий BaseExpandableListAdapter во Фрагменте, и я показываю его внутри ViewPager. Я пытаюсь показать текст каждого TextView дочерних элементов, когда я нажимаю на него. Я не знаю, почему он закрыл приложение, когда я нажимаю дочерний элемент. Может кто-нибудь мне помочь? Большое спасибо!Ошибка при показе Тоста в ExpandableList child item click

Вот мой фрагмент и адаптер:

public class SavedTabsFragment extends Fragment { 

    private ArrayList<String> parentItems = new ArrayList<>(); 
    private ArrayList<Object> childItems = new ArrayList<>(); 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View v = inflater.inflate(R.layout.fragment_explistview, null); 
     ExpandableListView elv = (ExpandableListView) v.findViewById(R.id.expandableListView1); 

     elv.setGroupIndicator(null); 
     elv.setClickable(true); 
     setGroupParents(); 
     setChildData(); 

     SavedTabsListAdapter adapter = new SavedTabsListAdapter(parentItems, childItems); 
     adapter.setInflater((LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE), this); 
     elv.setAdapter(adapter); 

//  elv.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
//   @Override 
//   public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 
//    Toast.makeText(getActivity()," holaaa",Toast.LENGTH_SHORT).show(); 
// 
//    return false; 
//   } 
//  }); 

     return v; 

    } 

    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     //TODO 
    } 

    public static SavedTabsFragment newInstance(){ 
     SavedTabsFragment savedTabsFragment = new SavedTabsFragment(); 
     Bundle args = new Bundle(); 
     //TODO info del bundle 
     return savedTabsFragment; 
    } 

    public void setGroupParents() { 
     parentItems.add("Androwwid"); 
     parentItems.add("Core Java"); 
     parentItems.add("Desktop Java"); 
     parentItems.add("Enterprise Java"); 
    } 

    public void setChildData() { 

     // Android 
     ArrayList<String> child = new ArrayList<>(); 
     child.add("Core"); 
     child.add("Games"); 
     childItems.add(child); 

     // Core Java 
     child = new ArrayList<>(); 
     child.add("Apache"); 
     child.add("Applet"); 
     child.add("AspectJ"); 
     child.add("Beans"); 
     child.add("Crypto"); 
     childItems.add(child); 

     // Desktop Java 
     child = new ArrayList<>(); 
     child.add("Accessibility"); 
     child.add("AWT"); 
     child.add("ImageIO"); 
     child.add("Print"); 
     childItems.add(child); 

     // Enterprise Java 
     child = new ArrayList<>(); 
     child.add("EJB3"); 
     child.add("GWT"); 
     child.add("Hibernate"); 
     child.add("JSP"); 
     childItems.add(child); 
    } 

    public class SavedTabsListAdapter extends BaseExpandableListAdapter { 

     private ArrayList<String> parentItems, child; 
     private ArrayList<Object> childItems; 
     private LayoutInflater inflater; 
     private Activity activity; 

     public SavedTabsListAdapter(ArrayList<String> parentItems, ArrayList<Object> childItems) { 
      this.childItems = childItems; 
      this.parentItems = parentItems; 
     } 

     public int getGroupCount() { 
      return parentItems.size(); 
     } 

      public int getChildrenCount(int i) { 
       return ((ArrayList<String>) childItems.get(i)).size(); 
     } 

     public Object getGroup(int i) { 
      return parentItems.get(i); 
     } 

     public Object getChild(int i, int i1) { 
      return null; 
     } 

     public long getGroupId(int i) { 
      return 0; 
     } 

     public long getChildId(int i, int i1) { 
      return 0; 
     } 

     public boolean hasStableIds() { 
      return false; 
     } 

     @Override 
     public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) { 
       if (convertView == null) { 
       convertView = inflater.inflate(R.layout.row, null); 
      } 

      ((CheckedTextView) convertView).setText(parentItems.get(groupPosition)); 
      ((CheckedTextView) convertView).setChecked(isExpanded); 


      return convertView; 
     } 
          @Override 
     public View getChildView(int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { 
      child = (ArrayList<String>) childItems.get(groupPosition); 

      TextView textView = null; 

      if (convertView == null) { 
       convertView = inflater.inflate(R.layout.group, null); 
      } 
      textView = new TextView(SavedTabsFragment.this.getActivity()); 
      textView = (TextView) convertView.findViewById(R.id.textView1); 
      textView.setText(child.get(childPosition)); 

      textView.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View view) { 
        Toast.makeText(activity, child.get(childPosition)+" holaaa", 
          Toast.LENGTH_SHORT).show(); 
       } 
      }); 




      return convertView; 
     } 


     @Override 
     public boolean isChildSelectable(int i, int i1) { 
      return true; 
     } 

     @Override 
     public void onGroupCollapsed(int groupPosition) { 
      super.onGroupCollapsed(groupPosition); 
     } 

     @Override 
     public void onGroupExpanded(int groupPosition) { 
      super.onGroupExpanded(groupPosition); 
     } 

     public void setInflater(LayoutInflater inflater, SavedTabsFragment savedTabsFragment) { 
      this.inflater = inflater; 
//   this = savedTabsFragment; 
     } 
      } 
} 

А вот мой макет:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/layout_fragment_exp" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <ExpandableListView 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:id="@+id/expandableListView1" 
     android:layout_centerHorizontal="true" 
     android:layout_alignParentTop="true" 

     android:cacheColorHint="@android:color/transparent" 
     android:divider="@android:color/transparent" 
     android:dividerHeight="20dp" 
     android:childDivider="@android:color/transparent" 
     android:scrollbarStyle="outsideOverlay" 
     android:paddingBottom="7dp" 
     android:paddingLeft="9dp" 
     android:paddingRight="9dp" 
     android:paddingTop="10dp" 
     /> 

</RelativeLayout> 

EDIT:

Вот сообщение LogCat:

05-08 11:58:12.395 18706-18706/com.example.julio.listviewactionbar E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: com.example.julio.listviewactionbar, PID: 18706 
    java.lang.NullPointerException 
      at android.widget.Toast.<init>(Toast.java:93) 
      at android.widget.Toast.makeText(Toast.java:241) 
      at com.example.julio.listviewactionbar.SavedTabsFragment$SavedTabsListAdapter$1.onClick(SavedTabsFragment.java:245) 
      at android.view.View.performClick(View.java:4569) 
      at android.view.View$PerformClick.run(View.java:18570) 
      at android.os.Handler.handleCallback(Handler.java:743) 
      at android.os.Handler.dispatchMessage(Handler.java:99) 
      at android.os.Looper.loop(Looper.java:136) 
      at android.app.ActivityThread.main(ActivityThread.java:5196) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602) 
      at dalvik.system.NativeStart.main(Native Method) 
+1

Какая ошибка возникает у вас? Показать трассировку стека. – Knossos

+0

Вы можете проверить? ваш 'activity = null'. вы забыли инициализировать его. в 'SavedTabsListAdapter' –

+0

почему вы настроили textview.setonclick вместо onChildClick()? –

ответ

0

Я считаю, что деятельность является нулевой. Почему вы не проходите getActivity в методе тоста, как показано ниже ».

Toast.makeText(getActivity(), child.get(childPosition)+" holaaa", 
         Toast.LENGTH_SHORT).show(); 
+0

Да, это была ошибка, активность var была нулевой. Огромное спасибо. – juliocb92

+0

добро пожаловать :) – dora

Смежные вопросы