我的问题对我来说似乎太复杂了:/
我有一个这样的主要活动:
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);
我想通过ContactListData类来扩充main_activity布局中的元素。 我想使用特定的类来执行此操作,因为我必须在我的应用程序的另一部分中重用此联系人通胀。
这是我的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):threadid = 1:线程退出 未捕获的异常(组= 0x41bd3700)04-28 23:37:51.934: E / AndroidRuntime(30918):致命异常:主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 :(得分:0)
问题可能是v.getTag()
是null
。要获取标记对象,视图应该已经存储了任何对象。
查看代码,您为onClick
视图设置了R.id.primary_action_view_container
侦听器,但未将任何对象保存为Tag
视图。
对于像这样的任何视图,您应该将对象保存为Tag
view.setTag(yourObject);
所以,你可以得到像这样的对象
Object yourObject = view.getTag();
答案 1 :(得分: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 intent:
ParentContext.startActivity(intent);