我的应用程序分为多个片段,每个片段都有自己的布局(.xml文件)。
当我开始在我的活动的onCreate()
方法中可视化第一个片段时,我使用setContentView(fragment_first)
设置了适当的布局。例如,如何更改第二个片段(fragment_second)中包含的TextView
?
答案 0 :(得分:0)
一般来说,Fragment
或任何Activity
或View
应该更新自己的内部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;
}
答案 1 :(得分:0)
您似乎在活动中设置了第一个片段的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();
}
}
答案 2 :(得分:0)
在您的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
等。