【问题标题】:how to send data from popup window to a tabbed activity having fragments?如何将数据从弹出窗口发送到具有片段的选项卡式活动?
【发布时间】:2021-04-22 05:58:45
【问题描述】:

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 (intent 是从弹窗传递过来的)

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;
    }

}

【问题讨论】:

    标签: android-studio android-fragments android-activity popupwindow android-tabbed-activity


    【解决方案1】:

    在 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();
        });
    

    【讨论】:

    • 非常感谢先生,6 天以来我没有得到任何帮助..你是英雄..谢谢
    • 但是如果我添加一个按钮和onlick到达secondActivity它会显示一个空指针。错误:java.lang.NullPointerException:尝试调用虚拟方法'java.lang.String android.os.Bundle .getString(java.lang.String)' 在空对象引用上...
    猜你喜欢
    • 1970-01-01
    • 2016-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-31
    相关资源
    最近更新 更多