2014-04-28 67 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