Android 无法在片段内创建类的对象
在片段中创建另一个类的对象时遇到问题。我的代码是Android 无法在片段内创建类的对象,android,android-fragments,Android,Android Fragments,在片段中创建另一个类的对象时遇到问题。我的代码是 public View onCreateView(LayoutInflater layoutinflater, ViewGroup viewgroup, Bundle bundle) { TextView tv = (TextView) getActivity().findViewById(R.id.textView3); (/*ERROR LINE*/)Database info = new Database(t
public View onCreateView(LayoutInflater layoutinflater,
ViewGroup viewgroup, Bundle bundle) {
TextView tv = (TextView) getActivity().findViewById(R.id.textView3);
(/*ERROR LINE*/)Database info = new Database(this);
info.open();
String data = info.getData();
info.close();
tv.setText(data);
return layoutinflater.inflate(R.layout.sqlview, viewgroup, false);
}
但它告诉我修改数据库类中的构造函数,该类以上下文作为参数。
请帮助。尝试使用
Database info = new Database(getActivity());
getActivity()
返回与片段关联的活动,由于activity
继承自Context
,您可以将其用作构造函数的参数。使用Merlevede回答您的问题,但运行此应用程序后,您必须在以下方面获得NullPointerException错误:
tv.setText(data);
因为tv
是null
TextView tv = (TextView) getActivity().findViewById(R.id.textView3);
textView3
打开sqlview
。因此,您必须使用以下代码更改代码:
public View onCreateView(LayoutInflater layoutinflater,
ViewGroup viewgroup, Bundle bundle) {
View v = layoutinflater.inflate(R.layout.sqlview, viewgroup, false);
TextView tv = (TextView) v.findViewById(R.id.textView3);
Database info = new Database(getActivity());
info.open();
String data = info.getData();
info.close();
tv.setText(data);
return v;
}
您必须在Database.java中添加构造函数
class Database extends SQLiteOpenHelper{
public Database(Context context) {
super(context, "Your Database Name", null, 1);
}
@Override
public void onCreate(SQLiteDatabase db) {
// write you create table query here.
}
// other method to get data...
}
这将解决您的构造函数问题。您可能在以下行中也有错误:(TextView)getActivity().findViewById(R.id.textView3);。此文本视图是否在
sqlview
上?是的。我没有错误,谢谢。你会告诉我它正在给我一个NPESpot的!!我不太明白为什么电视是空的。你把textView3
放在sqlview
上,但是你想用getActivity()
方法访问它,getActivity
返回你的活动布局,它是另一个布局,你需要这个布局来访问textView3
,所以你需要首先声明你的视图并使用v.findViewById()
我不知道你到底在哪里可以读到这个,但是当你膨胀其他布局并想在这个布局上使用小部件时,你必须这样做,就像在自定义适配器和许多其他地方一样,我希望你能理解我