【问题标题】:Use of Intent in onChildClickListener cannot find method在 onChildClickListener 中使用 Intent 找不到方法
【发布时间】:2015-06-09 06:49:21
【问题描述】:

我有一个包含子列表视图项目的列表视图,其中我提到了Using lists in Android(15.2. ExpandableListView 示例)。

我可以通过 Toast 获得每个列表项的点击并显示。

convertView.setOnClickListener(new OnClickListener() {
  @Override
  public void onClick(View v) {
    Toast.makeText(activity, children,
        Toast.LENGTH_SHORT).show();
  }

但是当我想在 childClick 中使用 Intent 时,我收到一个错误:cannot find symbol method startActivity(Intent)

下面是我的课:

public class MyExpandableListAdapter extends BaseExpandableListAdapter {
//Some sort of class code in here...

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

final String children = (String) getChild(groupPosition, childPosition);
TextView text = null;

if (convertView == null) {
  convertView = inflater.inflate(R.layout.listrow_details, null);
}
text = (TextView) convertView.findViewById(R.id.textView1);
text.setText(children);

convertView.setOnClickListener(new OnClickListener() {

  @Override
  public void onClick(View v) {
        //11 group position exist, each has 5 child
        switch ((groupPosition)){
        case 0:
        if (childPosition == 0) {

            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse("market://details?id=editors_choice"));
            startActivity(intent); //cannot find symbol method startActivity(Intent)


        } else if (childPosition == 1) {
            Toast.makeText(activity, "2",
                    Toast.LENGTH_SHORT).show();

        } else if (childPosition == 2) {
            Toast.makeText(activity, "3",
                    Toast.LENGTH_SHORT).show();


        } else if (childPosition == 3) {
            Toast.makeText(activity, "4",
                    Toast.LENGTH_SHORT).show();

        } else if (childPosition == 4) {
            Toast.makeText(activity, "5",
                    Toast.LENGTH_SHORT).show();

        }
        break;

        case 1:
        ...
  }
});
return convertView;
  }
 }

感谢您的帮助。

【问题讨论】:

  • 你能在你的活动中调用这个类 MyExpandableListAdapter 时显示吗?
  • 如果您可以查看我上面提到的链接,可能会更好地让您获得更广阔的视野,否则我也可以添加我的代码,没问题。顺便说一句,我在扩展 ActionBarActivity 的 Main Activity 中调用它。
  • 我担心你不能在你的列表适配器中调用 startActivity() 。它是您的应用程序上下文类的方法。
  • 我明白,但我该如何处理这种情况,我需要将此意图用于子项。你能帮我吗?

标签: android android-intent android-listview expandablelistview onclicklistener


【解决方案1】:

错误:找不到符号方法 startActivity(Intent)。

因为startActivity方法不是来自BaseExpandableListAdapter所以使用Context来访问startActivity方法。如:

v.getContext().startActivity(intent);

【讨论】:

  • 我可以运行该应用程序,但是当我单击“未找到处理 Intent { act=android.intent.action.VIEW dat=market://details?id=editors_choice } 的活动时它崩溃了” .你有什么想法吗?
  • 我把它改成了包,错误是:没有找到处理意图的活动{act=android.intent.action.VIEW dat=market://details?id=com.myapp.mapcards}
  • 是的,这对我有帮助!模拟器缺少GooglePlay的问题,需要在真机上测试才能访问包!谢谢..
【解决方案2】:

试试这个,

在 MyExpandableListAdapter 类中为 Context 定义一个引用,

private Context context;

为您的 MyExpandableListAdapter 类创建一个构造函数,并从您实例化它的位置传递上下文,

    public MyExpandableListAdapter(Context con) {
    context = con;
}

开始你的活动,

context.startActivity(intent)

【讨论】:

    猜你喜欢
    • 2015-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-15
    • 1970-01-01
    • 2021-10-04
    相关资源
    最近更新 更多