ExpandableListView onChildClick无法正常工作

时间:2012-12-25 23:19:00

标签: android expandablelistview

我写了一个媒体播放器应用程序。单击播放列表按钮时,将启动ExpandList活动,并根据单击的子项,它应该启动我的主活动并返回子位置。但它确实做任何事情。没有任何错误或任何错误。它似乎甚至没有进入onChildClick方法,我不知道为什么。我看了很多例子,他们似乎都有同样的原因。我希望有人可以指出我做错了什么。这是我的代码如下。谢谢

import java.util.ArrayList;
import android.app.ExpandableListActivity;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.ExpandableListView;
import android.widget.ExpandableListView.OnChildClickListener;
import android.widget.Toast;

public class ExpandListActivity extends ExpandableListActivity implements
OnChildClickListener {

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ExpandableListView expandbleLis = getExpandableListView();
    expandbleLis.setDividerHeight(2);
    expandbleLis.setGroupIndicator(null);
    expandbleLis.setClickable(true);
    expandbleLis.setOnChildClickListener(this);

    setGroupData();
    setChildGroupData();

    NewAdapter mNewAdapter = new NewAdapter(groupItem, childItem);
    mNewAdapter
    .setInflater(
            (LayoutInflater)       getSystemService(Context.LAYOUT_INFLATER_SERVICE),
            this);
    expandbleLis.setAdapter(mNewAdapter);

}

public void setGroupData() {
    groupItem.add("TechNology");
    groupItem.add("Mobile");
    groupItem.add("Manufacturer");
    groupItem.add("Extras");
}

ArrayList<String> groupItem = new ArrayList<String>();
ArrayList<Object> childItem = new ArrayList<Object>();

public void setChildGroupData() {
    /**
     * Add Data For TecthNology
     */
    ArrayList<String> child = new ArrayList<String>();
    child.add("Java");
    child.add("Drupal");
    child.add(".Net Framework");
    child.add("PHP");
    childItem.add(child);

    /**
     * Add Data For Mobile
     */
    child = new ArrayList<String>();
    child.add("Android");
    child.add("Window Mobile");
    child.add("iPHone");
    child.add("Blackberry");
    childItem.add(child);
    /**
     * Add Data For Manufacture
     */
    child = new ArrayList<String>();
    child.add("HTC");
    child.add("Apple");
    child.add("Samsung");
    child.add("Nokia");
    childItem.add(child);
    /**
     * Add Data For Extras
     */
    child = new ArrayList<String>();
    child.add("Contact Us");
    child.add("About Us");
    child.add("Location");
    child.add("Root Cause");
    childItem.add(child);
}


@Override
public boolean onChildClick(ExpandableListView parent, View v,
        int groupPosition, int childPosition, long id) {

    Toast.makeText(ExpandListActivity.this, "Clicked On Child",
            Toast.LENGTH_SHORT).show();

    // Starting new intent
    Intent in = new Intent(getApplicationContext(),
            AndroidBuildingMusicPlayerActivity.class);

    // Sending childPosition to PlayerActivity
    in.putExtra("childPosition", childPosition);

    Log.println(0, getClass().getName(), "onChildClick inside");

    setResult(100, in);

    startActivity(in);

    // Closing PlayListView
    finish();


    return true;
}
}

3 个答案:

答案 0 :(得分:1)

解决了我的问题

我只是在适配器类内部的onClick方法中添加它,它可以工作。谢谢你们。

Intent intent= new Intent(activity, AndroidBuildingMusicPlayerActivity.class);   
intent.putExtra("childPosition",childPosition); 
activity.setResult(100, intent);  
activity.finish();

答案 1 :(得分:0)

如果您使用startActivityForResult()调用此活动,则返回调用活动的正确方法如下:

Intent returnIntent = new Intent();
returnIntent.putExtra("childPosition", childPosition);
setResult(RESULT_OK,returnIntent);        
finish();

所以你需要删除这些行:

Intent in = new Intent(getApplicationContext(),
            AndroidBuildingMusicPlayerActivity.class);
startActivity(in);

希望它有所帮助。

答案 2 :(得分:0)

这是适配器类。我试过在onClick中添加一个intent但它不允许我“startActivity();”因为我猜我在适配器类中这样做而不是活动类。我不确定。

@SuppressWarnings("unchecked")
public class NewAdapter extends BaseExpandableListAdapter {

public ArrayList<String> groupItem, tempChild;
public ArrayList<Object> Childtem = new ArrayList<Object>();
public LayoutInflater minflater;
public Activity activity;

public NewAdapter(ArrayList<String> grList, ArrayList<Object> childItem) {
    groupItem = grList;
    this.Childtem = childItem;
}

public void setInflater(LayoutInflater mInflater, Activity act) {
    this.minflater = mInflater;
    activity = act;
}

@Override
public Object getChild(int groupPosition, int childPosition) {
    return null;
}

@Override
public long getChildId(int groupPosition, int childPosition) {
    return 0;
}

@Override
public View getChildView(int groupPosition, final int childPosition,
        boolean isLastChild, View convertView, ViewGroup parent) {
    tempChild = (ArrayList<String>) Childtem.get(groupPosition);
    TextView text = null;
    if (convertView == null) {
        convertView = minflater.inflate(R.layout.playlist_item, null);
    }
    text = (TextView) convertView.findViewById(R.id.songTitle);
    text.setText(tempChild.get(childPosition));
    convertView.setOnClickListener(new OnClickListener() {
        @Override
        public void onClick(View v) {
            Toast.makeText(activity, tempChild.get(childPosition),
                    Toast.LENGTH_SHORT).show();




        }
    });
    return convertView;
}

@Override
public int getChildrenCount(int groupPosition) {
    return ((ArrayList<String>) Childtem.get(groupPosition)).size();
}

@Override
public Object getGroup(int groupPosition) {
    return null;
}

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

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

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

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

@Override
public View getGroupView(int groupPosition, boolean isExpanded,
        View convertView, ViewGroup parent) {
    if (convertView == null) {
        convertView = minflater.inflate(R.layout.grouprow, null);
    }
    ((CheckedTextView) convertView).setText(groupItem.get(groupPosition));
    ((CheckedTextView) convertView).setChecked(isExpanded);
    return convertView;
}

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

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

}