我已经在Stack Overflow中尝试了大多数解决方案,但仍然无法按需要搜索片段ID。我在setBackgroundResource
下的活动中尝试onCreate
到我的图像按钮,但在编译时面对空引用对象。想知道如何从活动中调用片段中的id,当我搜索我的imagebutton
id并运行它时,它总是返回null引用对象。
我试过了:
1)getView()
2)RootView()
3)
android.support.v4.app.Fragment liBrary = getSupportFragmentManager()
.findFragmentById(R.id.imgbtn1);
imgBtn1 = (ImageButton) Library.getActivity().findViewById(R.id.imgbtn1);
imgBtn1.setBackgroundResource(R.mipmap.exercise);
4)
Fragment liBrary = getSupportFragmentManager()
.findFragmentById(R.id.imgbtn1);
imgBtn1 = (ImageButton) Library.getActivity().findViewById(R.id.imgbtn1);
imgBtn1.setBackgroundResource(R.mipmap.exercise);
-Edited- 还只是为了更清楚地了解我如何设置我的片段: 的 MainActivity.java
public class Homescreen extends AppCompatActivity implements TabLayout.OnTabSelectedListener {
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.homescreen);
android.app.Fragment library = getFragmentManager().findFragmentById(R.id.libraryMain);
(library.getView().findViewById(R.id.imgbtn1)).setBackgroundResource(R.mipmap.exercise);
}
Fragmentclass.java
public class Library extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState){
LinearLayout libraryLL = (LinearLayout) inflater.inflate(R.layout.library,
container, false);
希望这会有所帮助
答案 0 :(得分:0)
你会在xml中创建片段时给出片段的id,这将作为一个容器。
<fragment android:name="com.example.yourfragment"
android:id="@+id/test_fragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android.support.v4.app.Fragment Library = getSupportFragmentManager()
.findFragmentById(R.id.test_fragment);
imgbtn1 = (ImageButton) Library.getActivity().findViewById(R.id.imgbtn1);
imgbtn1.setBackgroundResource(R.mipmap.exercise);
答案 1 :(得分:0)
在Fragment中创建一个方法
在 Fragment
类中,制作一个新的public
方法,例如:
public void setFragmentBackground(Drawable mipmap) {
}
在此添加View fragmentView = getView()
内
根据Fragment的XML布局,最好将其转换为。
然后添加另一行:
fragmentView.setBackground(mipmap);
然后在你的活动中打电话给:
(theFragment).setFragmentBackground(getDrawable(R.mipmap.exercise));
theFragment是你想要改变的片段。
<强> N.B 强>
我遇到了类似的问题,请确保您没有在活动的onCreate()
方法中调用该方法...片段没有足够的时间来创建,因此您不能调用该方法,因为Fragment是一个空对象。而是调用Fragment中的方法,但是这样:
LinearLayout libraryLL = (LinearLayout) inflater.inflate(R.layout.library, null);
libraryLL.setBackgroundResource(R.mipmap.exercise);
答案 2 :(得分:0)
如果您从活动中动态添加片段,请执行以下操作:
YourFragment yourFragment = new YourFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
fragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, yourFragment, YOUR_TAG)
.commit();
然后你可以在你的片段中定义方法,如下所示:
public void setButtonBackground()
{
ImageButton imgbtn1 = (ImageButton)view.findViewById(R.id.imgbtn1);
imgbtn1.setBackgroundResource(R.mipmap.exercise);
}
从活动中调用它:
yourFragment.setButtonBackground();
UPD .: 如果你添加静态片段,你应该使用这个: 来自活动:
Fragment library = getFragmentManager().findFragmentById(R.id.test_fragment);
((ImageButton) library.getView().findViewById(R.id.imgbtn1)).setBackgroundResource(R.mipmap.exercise);