0

私はメディアプレーヤーアプリを書いています。再生リスト ボタンをクリックすると、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;
}
}
4

3 に答える 3

1

私の問題を解決しました

これをアダプタークラス内の onClick メソッドに追加しただけで機能します。皆さん、ありがとうございました。

Intent intent= new Intent(activity, AndroidBuildingMusicPlayerActivity.class);   
intent.putExtra("childPosition",childPosition); 
activity.setResult(100, intent);  
activity.finish();
于 2012-12-28T02:17:09.487 に答える
0

これはアダプタクラスです。onClick内にインテントを追加しようとしましたが、「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;
}

}
于 2012-12-27T01:55:00.393 に答える
0

を使用してこのアクティビティを呼び出している場合startActivityForResult()、呼び出し元のアクティビティに戻る正しい方法は次のとおりです。

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

したがって、次の行を削除する必要があります。

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

それが役に立てば幸い。

于 2012-12-26T05:13:24.493 に答える