首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类中的StartActivity失败从BaseAdapter扩展到Android?

类中的StartActivity失败从BaseAdapter扩展到Android?
EN

Stack Overflow用户
提问于 2014-02-19 17:06:34
回答 4查看 1.5K关注 0票数 0

我正在尝试自定义listview,它工作得很好,现在我已经从baseAdapter中进行了定制类扩展,在这个部分中,getView方法我在imageview中应用了getView并启动了新的活动,这是一个崩溃的应用程序代码

代码语言:javascript
运行
复制
 public class CustomAdapterClass extends BaseAdapter
{
ArrayList<FatwaBean> fatwaArrayList;
Context context;

CustomAdapterClass(ArrayList<FatwaBean> data,Context c) {
    fatwaArrayList = data;
    context = c;
}
public int getCount() {
    // TODO Auto-generated method stub
    return fatwaArrayList.size();
}

public Object getItem(int position) {
    // TODO Auto-generated method stub
    return fatwaArrayList.get(position);
}

public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}
public View getView(final int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
     View v = convertView;
     if (v == null)
     {
        LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(R.layout.search_fatwa_row, null);
     }

      final ImageView image = (ImageView) v.findViewById(R.id.search_image_row);
       TextView dateTextView = (TextView)v.findViewById(R.id.search_date_row);

       FatwaBean fatwaBean= fatwaArrayList.get(position);
     //image.setImageResource(fatwaBean.getQuestionImage());
       image.setImageResource(R.drawable.app_icon);
      //image.setTag(fatwaBean.getFatwaTopicQuestionId());
       dateTextView.setText(fatwaBean.getFatwaDate());
       Log.i("fatwaBean",""+fatwaBean.getFatwaDate());
       Log.i("fatwaBean",""+fatwaBean.getFatwaImageName());
       Log.i("fatwaBean Topic Question Image Name",""+fatwaBean.getQuestionImage());

       image.setOnClickListener(new OnClickListener() {              
               public void onClick(View v) {
               // TODO Auto-generated method stub


               final int itemname= (int)fatwaArrayList.get(position).getFatwaTopicQuestionId();
               Log.i("clicked Fatwa Image Topic Id",""+fatwaArrayList.get(position).getFatwaTopicQuestionId());
               Intent intent = new Intent(context,FatwaZoomActivityImageView.class);
           //passing fatwa topic question Id to get FatwaImage in NextActivity

              intent.putExtra("questionTopicIdForFatwa",fatwaArrayList.get(position).getFatwaTopicQuestionId());
              intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);
               context.startActivity(intent);

           }                        
       });
    return v;
}

Logcat

代码语言:javascript
运行
复制
02-19 22:02:05.220: E/AndroidRuntime(578): FATAL EXCEPTION: main
02-19 22:02:05.220: E/AndroidRuntime(578): android.util.AndroidRuntimeException: Calling startActivity() from outside of an Activity  context requires the FLAG_ACTIVITY_NEW_TASK flag. Is this really what you want?
02-19 22:02:05.220: E/AndroidRuntime(578):  at android.app.ContextImpl.startActivity(ContextImpl.java:803)
02-19 22:02:05.220: E/AndroidRuntime(578):  at android.content.ContextWrapper.startActivity(ContextWrapper.java:276)
02-19 22:02:05.220: E/AndroidRuntime(578):  at com.jamia.binoria.CustomAdapterClass$1.onClick(CustomAdapterClass.java:73)
02-19 22:02:05.220: E/AndroidRuntime(578):  at android.view.View.performClick(View.java:3100)
02-19 22:02:05.220: E/AndroidRuntime(578):  at android.view.View$PerformClick.run(View.java:11644)
02-19 22:02:05.220: E/AndroidRuntime(578):  at android.os.Handler.handleCallback(Handler.java:587)
02-19 22:02:05.220: E/AndroidRuntime(578):  at android.os.Handler.dispatchMessage(Handler.java:92)
02-19 22:02:05.220: E/AndroidRuntime(578):  at android.os.Looper.loop(Looper.java:126)
02-19 22:02:05.220: E/AndroidRuntime(578):  at android.app.ActivityThread.main(ActivityThread.java:3997)
02-19 22:02:05.220: E/AndroidRuntime(578):  at java.lang.reflect.Method.invokeNative(Native Method)
02-19 22:02:05.220: E/AndroidRuntime(578):  at java.lang.reflect.Method.invoke(Method.java:491)
02-19 22:02:05.220: E/AndroidRuntime(578):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
02-19 22:02:05.220: E/AndroidRuntime(578):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
02-19 22:02:05.220: E/AndroidRuntime(578):  at dalvik.system.NativeStart.main(Native Method)
EN

回答 4

Stack Overflow用户

发布于 2014-02-19 17:09:26

按照startActivity()中的建议,在LogCat ()之前添加这一内容。

代码语言:javascript
运行
复制
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
票数 1
EN

Stack Overflow用户

发布于 2014-02-19 17:09:01

在我看来,logcat的信息非常简单:

从活动上下文外部调用startActivity()需要FLAG_ACTIVITY_NEW_TASK标志。这就是你想要的吗?

如果不想使用FLAG_ACTIVITY_NEW_TASK,那么适配器可能会调用主活动或片段来启动下一个活动。

由于您正在调用intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);,所以我猜您并不真正需要新的任务标志,而调用父活动/片段是您的最佳选择。

票数 0
EN

Stack Overflow用户

发布于 2014-02-19 17:31:41

也许这应该是个评论但它有点长所以..。

代码语言:javascript
运行
复制
context.startActivity(intent);

上下文有一个StartActivity方法,活动也是这样。context变量的类型是Context,它指向活动对象,但我不知道被调用的方法是属于上下文还是属于活动对象。

也许您可以尝试将成员变量Context context替换为Activity parentActivity??

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21887402

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档