2014-02-19 29 views
0

我試圖以自定義列表視圖這是工作的罰款,現在我已經customclass從baseAdapter這部分getView方法擴展我在imageview的應用onclickListener和啓動這個崩潰的應用程序 代碼新的活動未能在類中的StartActivity從Android的BaseAdapter擴展?

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的

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) 
+0

如何初始化適配器類中的上下文? – Merlevede

+0

您嘗試過使用 Intent intent = new Intent(context.getApplicationContext(),FatwaZoomActivityImageView。類); – soynerdito

+0

@Merlevede我從那裏的活動調用適配器類我傳遞上下文並初始化它在適配器類 – user3233280

回答

0

的logcat的消息似乎相當簡單的me:

從Activity上下文外部調用startActivity()需要FLAG_ACTIVITY_NEW_TASK標誌。這真的是你想要的嗎?

如果您不想使用FLAG_ACTIVITY_NEW_TASK,那麼您的適配器應該可能會回調您的主Activity或Fragment以開始下一個活動。

既然你叫intent.addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK);,我猜你不是真的想要新的任務標誌,並回到父Activity/Fragment是你最好的選擇。

+0

請提及最新的解決方案? – user3233280

+0

我做到了。如果你不需要'FLAG_ACTIVITY_MULTIPLE_TASK',那麼你可以用'FLAG_ACTIVITY_NEW_TASK'替換那個標誌。如果你需要多任務標誌,那麼你的適配器需要回調你的活動(通過活動中的一個接口或公共方法),然後啓動下一個活動。 –

1

在startActivity()之前添加它,如LogCat中所建議的。

intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
0

也許這應該是一個評論,但它是一個有點長,所以......

context.startActivity(intent); 

上下文有StartActivity方法等做活動。你的context變量的類型是Context,它指向一個Activity對象,但我不知道被調用的方法是屬於上下文還是屬於Activity對象。

也許你可以嘗試替換你的成員變量Context contextActivity parentActivity ??

0

您傳遞給CustomAdapterClass構造函數的Context不是Activity上下文,但有些不同,可能是Application。因此例外。請閱讀this article以獲取更多解釋,不同的Context是有益的。

兩個解決方案:

  1. 傳遞一個Activity上下文。這應該是首選的選項。

  2. 按照其他答案的建議添加FLAG_ACTIVITY_NEW_TASK。請注意,這樣做會影響活動返回堆棧導航的工作方式,並不一定是您想要的。

相關問題