大家好我想知道如何从标签布局中的2个不同片段中获取数据。
例如:在此图像中,两个选项卡tab1和tab2都具有存储在编辑文本中的不同值。
tab1 helloooooo, tab2 hiiiiiii
我在主活动中有一个按钮,用于同时从两个标签中获取数据。
现在我的问题是如何在用户点击
时同时从两个标签中获取数据获取数据按钮
希望你能解决我的问题。
注意:在投票前请再次阅读。
答案 0 :(得分:3)
1。)在活动中保留片段的参考。
public class Activity extends AppCompatActivity {
private yourFargment frag1,frag2;
}
2。)将对象引用放入Adapter
的{{1}}中的引用变量中。
getItem()
3。)在@Override
public Fragment getItem(int index) {
switch (index) {
case 0:
frag1 = yourFargment.newInstance(index);
//frag1 =new yourFargment (); can also be used
return frag1;
case 1:
frag2 = yourFargment.newInstance(index);
return frag2;
}
return null;
}
内,您只需从onClick
获取这些值。
edittext
或
onClick(View..){
String val1 = frag1.edittext1.getText().toString(); // Note: make your `edittext` public
String val2 = frag2.edittext2.getText().toString();
其中String val1 = frag1.getData();
String val2 = frag2.getData();
}
是getData
public
方法
fragment
答案 1 :(得分:1)
您可以这样使用:
Bundle bundle = new Bundle();
bundle = getActivity().getIntent().getExtras();
YourFragment fragment = new YourFragment();
bundle.putString("yourKey", yourValue);
fragment.setArguments(bundle);
然后你可以在你的第二个片段中获取它们
onCreateView 中的
if (getArguments() != null)
{
mParam1 = getArguments().getString("yourKey");
}
答案 2 :(得分:1)
在你的活动中获取两个片段的成员对象..
FirstFragment mFirstFragment;
SecondFragment mSecondFragment;
在getItem(int position)
ViewPagerAdapter
方法中创建两者的实例。
@Override
public Fragment getItem(int position) {
// instantiate the fragment for the given page.
switch (position) {
case 0:
if (null == mFirstFragment) {
mFirstFragment = FirstFragment.newInstance();
}
return mFirstFragment;
case 1:
if( null == mSecondFragment ) {
mSecondFragment = SecondFragment.newInstance();
}
return mSecondFragment;
}
return null;
}
当从活动中点击按钮时,调用两个Fragment的getData
方法。
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.button1:
// Get data and use it as you want.
mFirstFragment.getData();
mSecondFragment.getData();
break;
}
}
答案 3 :(得分:1)
当您在选项卡中设置片段时,您有2个这些片段的对象。通过使用这些对象,您可以从片段中检索值。将以下代码写入MainActivity,例如
public class yourFragment..{
public String getData(){
return edittext.getText().toString();
// Note: with this no need to make your `edittext` public
}
}
并在Fragment中创建一个类似
的方法if(tab1fragment != null) {
String text = tab1fragment.getData();
}
这样您就可以从片段中检索数据。
答案 4 :(得分:1)
Tablayout仅包含TabItems而非片段。所以,我相信你使用TabLayout结合ViewPager,它实际上包含2个不同的片段。我想也许你想在2片段的Activity中获取getData()。此时,您可以轻松Fragment回调Activity并提供与getData()类似的数据。代码看起来像
在片段中
public class BaseFragment extends Fragment {
protected DataCallback mCallback;
@Override public void onAttach(Context context) {
super.onAttach(context);
if (context instanceof DataCallback) {
mCallback = (DataCallback) context;
}
}
//some place fragment affect to data
private void someFunction() {
mCallback.updateDataToActivity(data);
}
}
活动
public class MyActivity extends BaseActivity implements DataCallback {
T data;
public void updateDataToActivity(T data) {
this.data = data
}
// This is your getData function
private T getData() {
return data;
}
}
和DataCallback
public interface DataCallback {
void updateDataToActivity(T data);
}
答案 5 :(得分:0)
您可以使用像Otto这样的数据总线库:http://square.github.io/otto/
或者Rxjava:https://github.com/ReactiveX/RxJava
这两个库都是为了在类之间传播数据而设计的。
答案 6 :(得分:0)
每个标签都有一个带有 id 的 EditText
在 tab1.xml 中它是 edit1
<EditText
android:id="@+id/edit1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
它是 tab2.xml 中的 edit2
<EditText
android:id="@+id/edit2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
tab1.xml 和 tab2.xml 也有一个可以点击的按钮。如果你想在 tab1 和 tab2 上有相同的 id。
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/knop"
android:onClick="klik"/>
重要的项目是 OnClick。它指向一段必须在 MainActivity.java 代码中实现的代码
public void klik(View v){
alert("Just an alert.");
String val1 = ((EditText) findViewById(R.id.edit1)).getText().toString();
String val2 = ((EditText) findViewById(R.id.edit2)).getText().toString();
alert(val1);
alert(val2);
alert(val1 + val2);
}
最后是警报例程
private void alert(String message){ //mies
AlertDialog alertDialog = new AlertDialog.Builder(this).create();
alertDialog.setTitle("Alert");
alertDialog.setMessage(message);
alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
alertDialog.show();
}
实际上可以将片段视为一页。您可以通过调用主页面的 id 检索每个字段的信息,在本例中为 MainActivity.java。