如何将数据从弹出窗口发送到具有片段的选项卡式活动?

问题描述

mainActivity 有按钮。单击按钮后,弹出消息显示一个按钮和一个 TextInputLayout。 数据被发送到具有 2 个片段的选项卡式活动,并且 数据显示在第一个片段的文本视图中。错误是运行时数据不会显示在文本视图中

2 个片段的适配器--

public class adapter extends FragmentPagerAdapter {
    public adapter(@NonNull FragmentManager fm) {
        super(fm);
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        Fragment fragment;

        if (position == 1) {
            fragment = new SecondFragment();
        } else {
            fragment = new FirstFragment();
        }
        return fragment;
    }

    @Override
    public int getCount() {
        return 2;
    }

    @Nullable
    @Override
    public CharSequence getPageTitle(int position) {
        String title = null;
        if (position == 0) {
            title = "TextView";
        } else if (position == 1) {
            title = "Listview";
        }

        return title;
    }
}

mainActivity(点击按钮有弹出窗口)

 myDialog = new Dialog(this);
    }

    //for for joining match
    public void ShowPopup(View view) {
        myDialog.setContentView(R.layout.popup);
        myDialog.getwindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
        myDialog.show();

        name = myDialog.findViewById(R.id.ig_name);
        String igname = Objects.requireNonNull(name.getEditText()).getText().toString();

        entry = myDialog.findViewById(R.id.entry);
        entry.setonClickListener(v -> {
            Intent intent = new Intent(getApplicationContext(),secondActivity.class);
            intent.putExtra("igname",igname);
            startActivity(intent);
            finish();
        });
    }
}

我的第一个片段

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View view = inflater.inflate(R.layout.fragment_first,container,false);

    secondActivity activity = (secondActivity) getActivity();
    TextView output = view.findViewById(R.id.textshow);

    Bundle results = activity.getMyData();
    String value1 = results.getString("value");

    output.setText(value1);

    return view;
}

secondActivity(意图从弹出窗口转移)

public class secondActivity extends AppCompatActivity {
    private String name;
    TabLayout tabLayout;
    ViewPager viewPager;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        viewPager = findViewById(R.id.view_pager);
        viewPager.setAdapter(new adapter(getSupportFragmentManager()));

        tabLayout = findViewById(R.id.tabs_layout);
        tabLayout.setupWithViewPager(viewPager);

        Intent intent = getIntent();
        name = intent.getExtras().getString("igname");

    }

    public Bundle getMyData() {
        Bundle bundle = new Bundle();
        bundle.putString("value",name);
        return bundle;
    }

}

解决方法

在 onClickListner 中获取“igname”字符串值,并在完成活动之前关闭对话框。

        entry.setOnClickListener(v -> {
        String igname = Objects.requireNonNull(name.getEditText()).getText().toString();
        Intent intent = new Intent(getApplicationContext(),secondActivity.class);
        intent.putExtra("igname",igname);
        startActivity(intent);
        finish();
    });

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...