我有一个带有2个TextView对象的简单片段。该片段具有相应的Java类。如何将活动布局XML中的值传递给片段?我想用具有不同值的TextView对象多次实例化同一个片段。
因此,活动XML将类似于: *
谢谢。
答案 0 :(得分:1)
每个人似乎都忽略了它,但你可以实际上通过XML传递像标签这样的静态参数。
这有点复杂。首先,您需要声明要在attrs.xml
等文件中使用的自定义属性,然后需要覆盖Fragment.onInflate()
以检索这些属性的值。
official Android documentation提供了一个简单的示例,说明如何从XML布局中检索标签以在片段中使用它。
答案 1 :(得分:0)
好像你正在使用片段错误。
但是你可以在每个片段java类中使用textview.setText ...
答案 2 :(得分:0)
我猜你在xml中期待某种数据绑定方式(例如在wpf中)。 没有像android那样的数据绑定(至少没有第三方库)。
你所拥有的是片段的onCreateView()方法。 在那里你可以捕获对那些TextView对象的引用,如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment, container,
false);
TextView myTextView1 = (TextView)view.findViewById ("textView1");
TextView myTextView2 = (TextView)view.findViewById ("textView2");
return view;
}
在那里你也可以设置那些textViews的值,或者你可以在这样的代码中设置它:
myTextView1.setText ("this is my textview1 test");
因此,总而言之 - 在android中没有典型的内部xml数据绑定,你必须在片段代码中找到这些视图,然后用它们进行操作。
编辑:
如果你在活动的某个地方有数据,并且你想在创建它时将它传递给你的片段,你可以使用片段setArgument()函数(和相应的getArguments())。
你有一个例子:Setting Fragment arguments from Activity - 在接受的答案中。
编辑2:
根据新的数据绑定库,可以像这样进行绑定:
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="user" type="com.example.User"/>
</data>
<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.firstName}"/>
<TextView android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{user.lastName}"/>
</LinearLayout>
</layout>
link:https://developer.android.com/tools/data-binding/guide.html
但请注意,它仍然是测试版。
答案 3 :(得分:0)
您希望将数据传递给片段并让片段使用它。以下文章描述了整个9码:
http://developer.android.com/training/basics/fragments/communicating.html
简而言之: sender to setArguments:
Bundle args = new Bundle();
args.putString("myText", aText);
f.setArguments(args);
接收片段以检索参数:
String text = getArguments().getInt("myText"); // myTextView.setText(...)
答案 4 :(得分:0)
以下是Fragment
的示例。请注意您与TextView
互动的方式。您只需要创建任意数量的片段并将它们放入ArrayList
,这样您就可以从所有片段中获取信息。
public class Yourfragment extends Fragment {
private TextView mTextView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.your_fragment, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
View _view = getView();
if(_view != null){
mTextView = (EditText) _view.findViewById(R.id.your_textView);
}
}
}
答案 5 :(得分:0)
要回答你的问题,
你需要有一个扩展Activity
类的mainclass,你将从中实例化fragmnet。并且您需要一个包含这两个TextView
对象的片段类,并使用参数化构造函数对类变量进行广告。因此,您需要维护一个Map
,其中包含您的片段名称和textviewvalue1&#34; +&#34; textviewvalue2。所以现在在创建片段的实例时,您可以将映射中的值yiu作为参数发送到该片段构造函数。
像这样:
public class Yourfragment extends Fragment {
private TextView mTextView1;
private TextView mTextView2;
public Yourfragment(String txt1,String txt2){
super();
this.mTextView1.setText(txt1);
this.mTextView2.setText(txt2);
}
@Override public View
onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
//ur logic
}
@Override public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
//ur logic
}
} }
在您实例化的地方,使用map.get( fragmentname).split("+")[0]
和map.get( fragmentname).split("+")[1]
作为参数来构造,并将片段的标题设置为fragmentname