2014-04-28 65 views
0

我的問題似乎是太複雜了我:/呼叫ACTION_VIEW意圖

我有這樣的主要活動:

setContentView(R.layout.main_activity); 

(...) 

LinearLayout mainLinearLayout; 
mainLinearLayout = (LinearLayout)findViewById(R.id.mainLinearLayout); 

final JSONObject user = json_user.getJSONObject(0); 

ContactListData contactList = new ContactListData(); 
contactList.AffLayoutData(this, user, mainLinearLayout); 

我想膨脹要素在main_activity佈局,通過ContactListData類。 我想使用特定的類來做到這一點,因爲我必須在我的應用程序的另一部分中重複使用此接觸通脹。

這裏我ContactListData.java:

public class ContactListData extends Activity { 

    public void AffLayoutData(Context context, JSONObject contact, LinearLayout mainLinearLayout) { 

     try { 

      LinearLayout ll; 

      // > Here, a lot of layouts are inflated in main_activity : 
      ll = (LinearLayout) View.inflate(context, R.layout.contact_detail_separateur_titre, null); 
      ((TextView) ll.findViewById(R.id.titre)).setText("Téléphone"); 

      // (...) blablabla 

      // And there are buttons with OnClickListener : 

      ((FrameLayout) ll.findViewById(R.id.primary_action_view_container)).setOnClickListener(mSMSActionClickListener); 
      ((FrameLayout) ll.findViewById(R.id.primary_action_view_container)).setTag(contact.getString("Phone")); 

      // (...) blablabla 
      // Finally, last layout is inflated : 
      mainLinearLayout.addView(ll); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
      Log.e("GEDE JSONException", null); 
     } 
    } 

    /** My onClickListener of previous buttons */ 
    protected final OnClickListener mSMSActionClickListener = new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(Intent.ACTION_VIEW, Uri.fromParts("sms", v.getTag().toString(), null)); 
      startActivity(intent); 
     } 
    }; 

。 所有充氣都正確。但是,當我點擊一個按鈕,我有這樣的錯誤:

04-28 23:37:51.934:W/dalvikvm(30918):線程ID = 1:螺紋帶 未捕獲的異常(組= 0x41bd3700)離開04-28 23:37:51.934: E/AndroidRuntime(30918):致命異常:main 04-28 23:37:51.934: E/AndroidRuntime(30918):java.lang.NullPointerException 04-28 23:37 :51.934:E/AndroidRuntime(30918):at android.content.ContextWrapper.getApplicationContext(ContextWrapper.java:109) 04-28 23:37:51.934:E/AndroidRuntime(30918):at biz.jchambon.gedm .ContactListData $ 5.onClick(ContactListData.java:302)

我試圖在父活動中啓動Intent.ACTION_VIEW,但沒有成功(靜態/非靜態問題...)。誰能幫助我?

回答

0

的情況下是錯誤的。

我ContactListData.class更正:

public class ContactListData extends Activity { 

    public Context ParentContext; // < ADDED 

    public void AffLayoutData(Context context, JSONObject contact, LinearLayout mainLinearLayout) { 

     ParentContext = context; // < ADDED 
     LinearLayout ll; 

     try { 


      // INFLATION .... 

     } catch (JSONException e) { 
      e.printStackTrace(); 
      Log.e("GEDE JSONException", null); 
     } 
    } 

而且OnClickListener意圖必須這樣調用:

ParentContext.startActivity(intent); 
0

問題可能是v.getTag()null。要獲取標籤對象,視圖應該已經存儲了任何對象。

查看您的代碼,您已爲R.id.primary_action_view_container視圖設置onClick偵聽器,但未將任何對象保存爲視圖的Tag

你應該有保存爲Tag任何視圖這樣

view.setTag(yourObject); 

這樣一個對象,你可以得到的對象這樣

Object yourObject = view.getTag(); 
+0

謝謝您的回答;我有同樣的想法(我忘了複製/粘貼setTag線)。當我在startActivity(intent)之前執行Log.d(「Test getTag」,v.getTag()。toString())時,我可以看到它在控制檯中工作:/ – Jerry

+0

我明白了,上下文未定義。 – Jerry