Fragment中的Android ExpandableList onChildClickListener不起作用

时间:2015-06-01 10:06:44

标签: java android

我有关于onChildClickListener的代码,如下面的代码段

OnChildClickListener occl = new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                    int groupPosition, int childPosition, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(getActivity(), "Jalan", Toast.LENGTH_LONG).show();
                return true;
            }
        };
lv2.setOnChildClickListener(occl);

但吐司没有出现,为什么会出现呢?

取决于2个文件, (对不起,很长的帖子,我希望它很清楚)

以下剪切的适配器代码:

package com.em.crayonpediamoodlesiswa;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.content.Context;
import android.content.Entity;
import android.graphics.Typeface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.TextView;

public class ExpandableListAdapter extends BaseExpandableListAdapter {  

private Context context;
private List<String> expandableListTitle;
private HashMap<String, List<String>> expandableListDetail;
ArrayList<Entity> objects;

View rootView;

ExpandableListAdapterChild la;
ExpandableListView lv;
List<String> listDataHeader;
HashMap<String, List<String>> listDataChild;

public ExpandableListAdapter(Context context, List<String> expandableListTitle,
                             HashMap<String, List<String>> expandableListDetail) {
    this.context = context;
    this.expandableListTitle = expandableListTitle;
    this.expandableListDetail = expandableListDetail;
}

@Override
public Object getChild(int listPosition, int expandedListPosition) {
    return this.expandableListDetail.get(this.expandableListTitle.get(listPosition))
            .get(expandedListPosition);
}

@Override
public long getChildId(int listPosition, int expandedListPosition) {
    return expandedListPosition;
}

@Override
public View getChildView(int listPosition, final int expandedListPosition,
                         boolean isLastChild, View convertView, ViewGroup parent) {

    final String expandedListText = (String) getChild(listPosition, expandedListPosition);

    if (convertView == null) {
        LayoutInflater layoutInflater = (LayoutInflater) this.context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.list_item, null);

    }

    TextView expandedListTextView = (TextView) convertView
            .findViewById(R.id.expandedListItem);

    expandedListTextView.setText(expandedListText);
    /*ExpandableListView elv = new ExpandableListView(context);
    elv.setLayoutParams(new AbsListView.LayoutParams(AbsListView.LayoutParams.WRAP_CONTENT, AbsListView.LayoutParams.WRAP_CONTENT));
    elv.setAdapter(new ExpandableListAdapter(context,null,null));
    ((ViewGroup)convertView).addView(elv);*/    

    return convertView;
}   


@Override
public int getChildrenCount(int listPosition) {
    return this.expandableListDetail.get(this.expandableListTitle.get(listPosition))
            .size();
}

@Override
public Object getGroup(int listPosition) {
    return this.expandableListTitle.get(listPosition);
}

@Override
public int getGroupCount() {
    return this.expandableListTitle.size();
}

@Override
public long getGroupId(int listPosition) {
    return listPosition;
}

@Override
public View getGroupView(int listPosition, boolean isExpanded,
                         View convertView, ViewGroup parent) {
    String listTitle = (String) getGroup(listPosition);


    if (convertView == null) {
        LayoutInflater layoutInflater = (LayoutInflater) this.context.
                getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = layoutInflater.inflate(R.layout.list_group, null);
    }

    TextView listTitleTextView = (TextView) convertView
            .findViewById(R.id.listTitle);

    listTitleTextView.setTypeface(null, Typeface.BOLD);
    listTitleTextView.setText(listTitle);

    return convertView;
}


@Override
public boolean hasStableIds() {
    return false;
}

@Override
public boolean isChildSelectable(int listPosition, int expandedListPosition) {
    return true;
}
}

使用Fragment的以下代码段活动代码:

package com.em.crayonpediamoodlesiswa;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.Toast;

public class MyCourses extends Fragment{
private static final String url = "jdbc:mysql://192.168.43.166:3306/moodle";
private static final String user = "emil";
private static final String pass = "emilhamep";
private int amount;

ExpandableListAdapter la;
ExpandableListView lv2;
List<String> expandableListTitle;
HashMap<String, List<String>> expandableListDetail;


@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.my_courses, container, false);

    lv2=(ExpandableListView)rootView.findViewById(R.id.expandableListViewChild);

    prepareListDataMyCourse();

    la=new ExpandableListAdapter(getActivity(), expandableListTitle, expandableListDetail);

    lv2.setAdapter(la);

  //Menentukan aksi ketika diklik untuk setiap hasil fetch array
    try{
        //Toast.makeText(getActivity(), "Jalan-jalan", Toast.LENGTH_LONG).show();
        int user_id = 5;
        Class.forName("com.mysql.jdbc.Driver");
        Connection con=DriverManager.getConnection(url,user,pass);

        Statement st = con.createStatement();
        ResultSet rschild=st.executeQuery("SELECT co.fullname FROM course co JOIN course_display codi WHERE codi.userid=" + user_id + " AND co.id= codi.course");
        final String[] a = null;
        int counter=0;
        while(rschild.next()) {
            a[counter]=rschild.getString(1);
            //my_course.add(rschild.getString(1));
            counter++;
        }       


      /*  lv2.setOnChildClickListener(new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v, int groupPosition,
                    int childPosition, long id) {   
                Toast.makeText(getActivity(), "Jalan", Toast.LENGTH_LONG).show();
                    for(int b=0;b<a.length;b++){
                        if(childPosition == b){
                            Toast.makeText(getActivity(), a[b], Toast.LENGTH_LONG).show();
                        }
                        Intent intent = new Intent(getActivity(),Classroom.class);
                        String logged_user=a[b].toString();

                        intent.putExtra("username", logged_user);
                        startActivity(intent);
                    }
                    return false;
            }
        });*/

        OnChildClickListener occl = new OnChildClickListener() {

            @Override
            public boolean onChildClick(ExpandableListView parent, View v,
                    int groupPosition, int childPosition, long id) {
                // TODO Auto-generated method stub
                Toast.makeText(getActivity(), "Jalan", Toast.LENGTH_LONG).show();
                return true;
            }
        };
        lv2.setOnChildClickListener(occl);

    }
    catch(Exception e){
        e.printStackTrace();
        Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG);
    }
    return rootView;
}

private void prepareListDataMyCourse(){
    expandableListTitle = new ArrayList<String>();
    expandableListDetail = new HashMap<String, List<String>>();
    try{
        int user_id = 5;
        Class.forName("com.mysql.jdbc.Driver");
        Connection con=DriverManager.getConnection(url,user,pass);

        Statement st = con.createStatement();       

        //Query header expandable           

        List<String> my_course = new ArrayList<String>();           


        expandableListTitle.add("My Course");               


        //Query dapet list my course
        ResultSet rschild=st.executeQuery("SELECT co.fullname FROM course co JOIN course_display codi WHERE codi.userid=" + user_id + " AND co.id= codi.course");

        while(rschild.next()) {             
            my_course.add(rschild.getString(1));                
        }                   

        expandableListDetail.put(expandableListTitle.get(0), my_course);

    }catch(Exception e){
        e.printStackTrace();
        Toast.makeText(getActivity(), e.toString(), Toast.LENGTH_LONG);
    }
}



}

2 个答案:

答案 0 :(得分:1)

check your adapter  isChildSelectable returns true or false.return it true

  @Override
  public boolean isChildSelectable(int groupPosition, int childPosition) {
    return true;
  }

答案 1 :(得分:0)

应用此

OnChildClickListener occl = new OnChildClickListener() {

        @Override
        public boolean onChildClick(ExpandableListView parent, View v,
                int groupPosition, int childPosition, long id) {
            // TODO Auto-generated method stub
            Toast.makeText(getActivity(), "Jalan", Toast.LENGTH_LONG).show();
            return false;
        }
    };
    lv2.setOnChildClickListener(occl);

如果这不起作用,请参阅本教程http://www.androidhive.info/2013/07/android-expandable-list-view-tutorial/