use*_*796 66 android android-layout
我有一个受支持的片段活动,它将加载diff片段.片段有一些textView,id = "score"我希望得到它的句柄,但findViewById得分的textView返回null.为什么这样?
textView放在片段中
public class MyActivity extends extends ActionBarActivity
implements NavigationDrawerFragment.NavigationDrawerCallbacks{
private TextView scoreBoardTextView = null;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_home);
mNavigationDrawerFragment = (NavigationDrawerFragment)
getSupportFragmentManager().findFragmentById(R.id.navigation_drawer);
scoreBoardTextView = (TextView) findViewById(R.id.score); //this returns null
}
@Override
public void onNavigationDrawerItemSelected(int position) {
//set fragment
}
}
Run Code Online (Sandbox Code Playgroud)
SMR*_*SMR 64
直接访问片段外的片段视图不是一个好主意.您应该使用片段回调接口来处理此类情况并避免错误.以下方式有效但不建议使用,因为这不是一个好习惯.
TextView,那么你应该在你的类中定义一个方法,如下所示:FragmentActivityFragment
public class MyFragment extends Fragment {
TextView mTextView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.activity_main, container, false);
mTextView = (TextView) view.findViewById(R.id.textView1);
return view;
}
public void setTextViewText(String value){
mTextView.setText(value);
}
}
Run Code Online (Sandbox Code Playgroud)
现在你可以在这里使用Activity这个:
myFragment.setTextViewText("foo");
Run Code Online (Sandbox Code Playgroud)
这里myFragment属于类型MyFragment.
如果你想访问整个,TextView那么你可以在里面定义一个这样的方法MyFragment.java:
public TextView getTextView1(){
return mTextView;
}
Run Code Online (Sandbox Code Playgroud)
通过这个你可以访问TextView自己.
希望这可以帮助.:)
Ars*_*ood 22
可以通过以下方式:
在片段中保持对膨胀视图的引用,如下所示:
public class MyFragment extends SherlockFragment{
MainMenuActivity activity;
public View view;
public MyFragment(){
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
if ( getActivity() instanceof MainMenuActivity){
activity = (MainMenuActivity) getActivity();
}
view = inflater.inflate(R.layout.aboutus, container, false);
return view;
}
}
Run Code Online (Sandbox Code Playgroud)
在Activity中创建一个函数,如下所示:
public class MainMenuActivity extends SherlockFragmentActivity {
SherlockFragment fragment = null;
public void switchContent(SherlockFragment fragment) {
this.fragment = fragment;
getSupportFragmentManager()
.beginTransaction()
.replace(R.id.mainmenu, fragment)
.commit();
invalidateOptionsMenu();
}
Run Code Online (Sandbox Code Playgroud)
其目的是保持对当前片段的引用.每当你想切换片段时,你都会调用上面的函数,就像这样(来自片段):
activity.switchContent( new MyFragment_2());
Run Code Online (Sandbox Code Playgroud)
现在你有了当前的片段引用.所以你可以直接在Activity中访问Fragment的视图,如下所示:this.fragment.view
Ali*_*ran 12
您无需引用Fragment视图即可在Activity中获取其组件.因为您可以在父Activity中直接访问Fragment的布局组件.
只需您可以访问任何组件
findViewById(R.id.child_of_fragment_layout);
Run Code Online (Sandbox Code Playgroud)
您可以使用 Fragment 类的 getView 方法访问。
例如,您的 MyFragment 中有一个 ID 为“text_view”的 TextView
在您的 Activity 中创建一个 Fragment of Yours:
MyFragment myFragment = new MyFragment();
Run Code Online (Sandbox Code Playgroud)
当您需要孩子时,只需调用 getView,然后找到您的 childView。
View view = myFragment.getView();
if (view !=null) {
view.findViewById(R.id.text_view).setText("Child Accessed :D");
}
Run Code Online (Sandbox Code Playgroud)
注意:如果您想要片段的根视图,那么myFragment.getView();就足够了。
小智 5
为了访问 TextView 或 Button 或片段中的任何内容,您需要执行以下操作:
public class BlankFragment extends Fragment {
public View view;
public TextView textView;
public Button button;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view =inflater.inflate(R.layout.fragment_blank, container, false);
textView = (TextView)view.getRootView().findViewById(R.id.textView_fragment1);
return view;
}
public void changeTextOfFragment(String text){
textView.setText(text);
view.setBackgroundResource(R.color.colorPrimaryDark);
}
Run Code Online (Sandbox Code Playgroud)
一旦在 MainActivity 或任何其他要从 Fragment 访问 TextView 的地方完成此操作,您应该确保在 OnCreate() 方法中以其他方式设置片段,它很可能会抛出 nullPointer。因此,您要更改 TextView 的活动应如下所示:
public class MainActivity extends AppCompatActivity {
private Button button1;
private FragmentManager fragmentManager;
private FragmentTransaction fragmentTransaction;
BlankFragment blankFragment = new BlankFragment();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button1 = (Button)findViewById(R.id.button1);
changeFragment();
fragmentManager = getFragmentManager();
fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.fragment1,blankFragment);
fragmentTransaction.commit();
}
private void changeFragment(){
button1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
blankFragment.changeTextOfFragment("Enter here the text which you want to be displayed on your Updated Fragment");
}
});
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 :)
小智 0
分数textView在fragment的布局中,它不在MyActivity的布局中,即R.layout.activity_home。因此,一旦您膨胀相应的布局文件,您就可以在该片段中找到乐谱文本视图。
| 归档时间: |
|
| 查看次数: |
81620 次 |
| 最近记录: |