我的应用程序分为多个片段,每个片段都有自己的布局(.xml 文件)。
当我开始在我的活动方法中可视化第一个片段时onCreate()
,我使用setContentView(fragment_first)
. 例如,如何更改TextView
包含在第二个片段 (fragment_second) 中的 a?
一般来说, aFragment
或任何Activity
orView
都应该更新它自己的内部 UI 控件。它更容易,而且它的设计很好。其他类/事件可能会更新Fragment
数据的状态,但它会处理该状态的显示方式。
编辑以回答评论的问题:
这是在片段中加载内容视图的方法:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.pump_info, container, false);
return view;
}
似乎您为活动中的第一个片段设置了 xml 文件。简而言之,你应该做的是创建一个全新的类并让它扩展android.support.v4.app.Fragment
,也让你的活动扩展 FragmentActivity 而不仅仅是 Activity。
然后在你的android.support.v4.app.Fragment
类(从现在开始我将调用你的片段)中,你应该重写该onCreateView(LayoutInflater inflate, ViewGroup container, Bundle savedInstanceState){}
方法,并且在这个方法中你应该像这样写一行:
View view = inflater.inflate(R.layout.the_xml_layout_for_this_fragment, container, false);
它膨胀片段的布局并将它放置在你的活动布局中的适当位置.
在此之后您需要return view;
,但在您返回此视图之前,您可以view.findViewById(R.id.id_of_a_view_from_the_xml_layout_file);
找到一个元素并对其进行操作。
您应该为应用程序中需要的每个片段创建这样一个片段类,并让它膨胀它自己的 xml 布局文件。
有关更详细的说明,您可以查看http://www.youtube.com/watch?v=4BKlST82Dtg或其他视频或书面教程。
编辑:这是一个基本的片段类:
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class MyFrag extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// inflate the view:
View view = inflater.inflate(R.layout.myfrag_layout, container, false);
// manipulate widgets, for example:
TextView textView = (TextView) view.findViewById(R.id.textView);
textView.setText("read me!!!");
// return the view:
return view;
}
}
这是育儿活动:
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
public class MyFragmentActivity extends FragmentActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// notice that there is a different layout file for the activity and for
// the fragment!
setContentView(R.layout.xml_layout_for_the_activity);
// to start the fragment and stick it into your activity (not needed if
// you use ViewPager)
FragmentManager fragMan = getSupportFragmentManager();
fragMan.beginTransaction()
.add(R.id.the_visual_element_that_will_contain_your_fragments_layout, fragMan)
.commit();
}
}
在您的onCreateView()
方法中,您应该将稍后需要访问的所有视图分配给片段类中的字段,如下所示,
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
view = inflater.inflate(R.layout.xxx, container, false);
this.aTextView = (TextView)view.findViewById(R.id.a_text_view);
this.anImageView = (ImageView)view.findViewById(R.id.an_image_view);
...
}
然后,您可以aTextView
在片段执行的其他地方使用等。