2017-11-25 103 views
-4

我知道这种类型的错误已经被回答。但我无法弄清楚错误的原因。我试图完成的是将按钮动态地添加到主要活动中的按钮单击的片段中。请帮帮我。我是新来的Android开发,关于getView的空对象引用方法

public class MainActivity extends AppCompatActivity { 

Button add; 
Fragment f; 
LinearLayout ll; 
View v; 

@Override 
protected void onCreate(final Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    add = (Button) findViewById(R.id.addButton); 

    add.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      f = (ButtonFragment) getFragmentManager().findFragmentById(R.id.buttonLayout); 
      //if (f != null) { 
       v = f.getView(); 
       ll = (LinearLayout) v.findViewById(R.id.buttonLayout); 
       Button dummy = new Button(v.getContext()); 
       LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(70, 70); 
       dummy.setLayoutParams(layoutParams); 
       ll.addView(dummy); 
      //} else { 
       // System.out.println("View is null"); 
      //} 

     } 
    }); 
} 


} 

这是片段类

public class ButtonFragment extends Fragment { 


@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View rootView = inflater.inflate(R.layout.fragment_button, container, false); 
    return rootView; 
} 
@Override 
public void onViewCreated(View view, Bundle savedInstanceState) { 
    System.out.println("View created"); 
} 
} 

这是错误代码

11-25 23:15:15.442 987 -987/com.example.nekib.dynamiclayoutdemo E/AndroidRuntime:FATAL EXCEPTION:main 过程: com.example.nekib.dynamiclayoutdemo,PID:987 显示java.lang.NullPointerException:尝试一个空对象 参考 上调用虚拟方法 'android.view.View android.app.Fragment.getView()' 在 COM (android.view.java:4780) at android.view.View $ PerformClick.run(View.java: (Handler.java:7) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:135) at java.lang.reflect.Method.invoke(Method.java:372) 在 com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)

+0

可否请你帮我解决问题 –

+0

你是否在XML中声明了这个片段?因为我没有看到任何运行时初始化。 – ADM

+0

是的,我做了它在XML文件 –

回答

-2

首先R.id.buttonLayout不能既是碎片ID也不是片段内的LinearLayout

更重要的是,如果您使用Support Fragment类,则需要使用getSupportFragmentManager()。看看你import android.support.v4.app.Fragment

除此之外,虽然,你可能不应该有活动中的按钮控制片段布局

+1

为什么它有-1?它应该工作... – Selvin

+0

为什么我不应该这样做 –

+0

它不支持片段类 –

0

你会发现,从未发起的片段。你只是找到它并得到它的观点。从未创建片段,因此它具有空视图。

顺便说一下正确的方法来替换片段如下。

FragmentManager fm = getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
Fragment fragment = new FragmentProfile(); 
ft.replace(R.id.main_frame_container, fragment, fragmentName.toString()); 
ft.commit(); 

这里main_frame_container是活动的布局FrameLayout

使用此方法在视图上替换或添加片段。

+0

我不会更换任何片段。只是从主要活动添加按钮 –

+0

然后你可以告诉我如何启动一个片段 –

+1

我从2年兄弟工作在Android,我从来没有使用任何方法来制作这样的按钮。 – Khemraj

相关问题