Java 片段内的addView()抛出NullPointerException
我正在从事具有MyAdapter的片段活动的Android项目:Java 片段内的addView()抛出NullPointerException,java,android,nullpointerexception,Java,Android,Nullpointerexception,我正在从事具有MyAdapter的片段活动的Android项目: public static class MyAdapter extends FragmentPagerAdapter { public MyAdapter(FragmentManager fragmentManager) { super(fragmentManager); } @Override public int getCount() {
public static class MyAdapter extends FragmentPagerAdapter {
public MyAdapter(FragmentManager fragmentManager) {
super(fragmentManager);
}
@Override
public int getCount() {
return ITEMS;
}
@Override
public Fragment getItem(int position) {
switch (position) {
case 0: // Fragment # 0 - Pokazuje listę
return ImageFragment.init(position);
//return TruitonListFragment.init(position);
case 1: // Fragment # 1 - Pokazuje wybór
return ImageFragment.init(position);
default:
return ImageFragment.init(position);
}
}
}
现在我有了一个ImageFragment类,它扩展了Fragment。我正试图将ImageFragment中的View()添加到布局中的元素中,我遇到了NullPointerException。它在活动中起作用,但在片段中不起作用。有可能解决这个问题,到底发生了什么
public class ImageFragment extends Fragment implements OnClickListener {
int fragVal;
public static ImageFragment init(int val) {
ImageFragment truitonFrag = new ImageFragment();
// Supply val input as an argument.
Bundle args = new Bundle();
args.putInt("val", val);
truitonFrag.setArguments(args);
return truitonFrag;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
InitializeDatabase(); // Wczytanie zasobów
fragVal = getArguments() != null ? getArguments().getInt("val") : 1;
//
AddonsList = new ArrayList<myAddons>();
//
Parent = new ArrayList<Long>();
Parent.add((long) 0);
GenerateNodeTree((long) 0); // Ustawienie fragmentu na początek
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View layoutView = inflater.inflate(R.layout.fragment_pager_list,
container, false);
linearLayout = new LinearLayout(getActivity());
linearLayout = (LinearLayout) layoutView.findViewById(R.id.Groups);
linearLayout = new LinearLayout(getActivity());
GoTop = (Button) layoutView.findViewById(R.id.Button02);
GoHome = (Button) layoutView.findViewById(R.id.Button01);
return layoutView;
}
private void GenerateNodeTree(Long TreeNode) {
try {
currentProductList = new ArrayList<Products>();
ClearView();
for(ProductGroups grupa : myGroupList) {
Log.i("mm",grupa.getNazwa());
LinearLayout row = new LinearLayout(getActivity());
row.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
if(grupa.getPARENTID() == TreeNode & grupa.getPOSPRODID() == 0) { // Przyciski kategorii
ImageButton imgTag = new ImageButton(getActivity());
Button btnTag = new Button(getActivity());
int k = R.drawable.icon_empt;
imgTag.setImageResource(k);
btnTag.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));
btnTag.setText(grupa.getNazwa());
btnTag.setId((int) grupa.getPOSPRODGRPID());
btnTag.setOnClickListener(this);
row.addView(imgTag);
row.addView(btnTag);
linearLayout.addView(row); // HERE NULL POINTER APPEARS
}
}
}
catch(Exception exc)
{
//Print.StandardToast(getActivity(), exc.getStackTrace().toString());
}
// Koniec generowania widoku
}
}
公共类ImageFragment扩展了片段实现OnClickListener{
国际弗拉格瓦尔;
公共静态ImageFragment init(int val){
ImageFragment truitonFrag=新ImageFragment();
//提供val输入作为参数。
Bundle args=新Bundle();
参数putInt(“val”,val);
truitonFrag.setArguments(args);
返回truitonFrag;
}
@凌驾
创建时的公共void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
InitializeDatabase();//Wczytanie zasobów
fragVal=getArguments()!=null?getArguments().getInt(“val”):1;
//
AddOnList=新的ArrayList();
//
父项=新的ArrayList();
Parent.add((long)0);
GenerateNodeTree((长)0);//Ustavienie fragmentu na początek
}
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图布局视图=充气机。充气(R.layout.fragment\u pager\u列表,
货柜(虚假);;
linearLayout=新的linearLayout(getActivity());
linearLayout=(linearLayout)layoutView.findViewById(R.id.Groups);
linearLayout=新的linearLayout(getActivity());
GoTop=(按钮)layoutView.findViewById(R.id.Button02);
GoHome=(按钮)layoutView.findViewById(R.id.Button01);
返回布局视图;
}
专用void GenerateNodeTree(长树节点){
试一试{
currentProductList=新的ArrayList();
ClearView();
对于(ProductGroups grupa:myGroupList){
Log.i(“mm”,grupa.getNazwa());
LinearLayout行=新的LinearLayout(getActivity());
row.setLayoutParams(新的LayoutParams(LayoutParams.MATCH_父级,LayoutParams.WRAP_内容));
如果(grupa.getPARENTID()==TreeNode&grupa.getPOSPRODID()==0){//Przyciski-kategorii
ImageButton imgTag=新的ImageButton(getActivity());
按钮btnTag=新按钮(getActivity());
int k=R.drawable.icon\u empt;
imgTag.setImageResource(k);
btnTag.setLayoutParams(新的LayoutParams(LayoutParams.MATCH_父级,LayoutParams.MATCH_父级));
btnTag.setText(grupa.getNazwa());
btnTag.setId((int)grupa.getPOSPRODGRPID());
btnTag.setOnClickListener(此);
row.addView(imgTag);
行。添加视图(btnTag);
linearLayout.addView(行);//此处显示空指针
}
}
}
捕获(异常exc)
{
//Print.standardtoos(getActivity(),exc.getStackTrace().toString());
}
//维多库河
}
}
您的片段类中似乎没有线性布局
字段(代码遗漏?)。无论如何,您似乎初始化了onCreateView()
回调中的linearLayout
字段。问题是您试图在onCreate()
方法中也使用它(通过GenerateNodeTree()
调用),该方法在之前被调用onCreateView()
(因此,linearLayout
此时不会被初始化)。因此,移动GenerateNodeTree((long)0)在onCreateView()
或在onCreateView()
之后调用的onActivityCreated()
中调用你是对的,我调用的GenerateNodeTree在初始化之前使用linearLayout。我在onCreateView中使用GenerateNodeTree,没有例外!:)非常感谢。