【问题标题】:Need help getting a Toast to appear on a Tab Fragment需要帮助让 Toast 出现在标签片段上
【发布时间】:2021-01-12 05:19:07
【问题描述】:

当 EditText 为空时,我试图让 Toast 出现在选项卡式片段中。

这是我的 MainActivity 的 onCreate:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this, getSupportFragmentManager());
        ViewPager viewPager = findViewById(R.id.view_pager);
        viewPager.setAdapter(sectionsPagerAdapter);
        TabLayout tabs = findViewById(R.id.tabs);
        tabs.setupWithViewPager(viewPager);        
    }
}

我的选项卡式片段可以正常使用此代码:

public class SignupFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_signup, container, false);
    }
}

但是在像这样创建 Toast 时它不起作用:

public class SignupFragment extends Fragment {

    EditText textFillCheck;
    Button submitCheck;

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

        submitCheck = (Button) submitCheck.findViewById(R.id.signupBtn);
        textFillCheck = (EditText) textFillCheck.findViewById(R.id.signupFirstName);
        submitCheck.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (TextUtils.isEmpty(textFillCheck.getText().toString())) {
                    Intent intent = new Intent(getActivity(), SignupFragment.class);
                    startActivity(intent);
                    Toast.makeText(getActivity(), "Please fill in all fields", Toast.LENGTH_SHORT).show();
                }
                else{Toast.makeText(getActivity(), textFillCheck.getText().toString(), Toast.LENGTH_LONG).show();
                }
            }
        });

        return inflater.inflate(R.layout.fragment_signup, container, false);
    }
}

【问题讨论】:

    标签: java android android-studio android-fragments android-toast


    【解决方案1】:

    您没有访问片段布局的视图,因此您在onCreateView() 中返回的布局没有附加您的逻辑。您应该将 Fragment 设置为如下所示:

    public class SignupFragment extends Fragment {
    
        EditText textFillCheck;
        Button submitCheck;
    
        @Nullable
        @Override
        public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState){
    
            // Store a reference to your Fragment's inflated layout
            View root = inflater.inflate(R.layout.fragment_signup, container, false);
            
            // Use the reference to access your Fragment's views
            submitCheck = (Button) root.findViewById(R.id.signupBtn);
            textFillCheck = (EditText) root.findViewById(R.id.signupFirstName);
            
            submitCheck.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    if(TextUtils.isEmpty(textFillCheck.getText().toString())) {
                        Toast.makeText(getActivity(), "Please fill in all fields", Toast.LENGTH_SHORT).show();
                    }else{
                        Toast.makeText(getActivity(), textFillCheck.getText().toString(), Toast.LENGTH_LONG).show();
                    }
                }
            });
    
            // Return the inflated layout
            return root;
        }
    }
    

    【讨论】:

    • 好的,它正在与此修复程序部分运行,当 EditText 被填充时,'else' 语句返回正常,但当字段为空并单击按钮时应用程序关闭
    • 我刚刚注意到 Intent 不正确。如果 EditText 为空,期望的行为是什么?你想只显示 Toast 还是想另外导航到另一个活动?
    • 谢谢。我删除了 Intent,一切正常。
    • 不客气。我更新了我的答案以反映已删除的意图。请不要忘记将答案标记为已接受。
    【解决方案2】:

    我很惊讶为什么你的代码没有像 VIEW DOES NOT EXISTNULL POINTER EXCEPTION 这样的错误,因为

    首先,您在显示 Toast 之前更改活动,其次您在视图初始化后膨胀布局并且没有正确获取上下文,正确的方法是使用 OnViewCreated() 像这样

    @Override
    public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
        super.onViewCreated(view, savedInstanceState);
    
        submitCheck = (Button) view.findViewById(R.id.signupBtn);
    
        textFillCheck = (EditText) view.findViewById(R.id.signupFirstName);
    
        submitCheck.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
    
            if (TextUtils.isEmpty(textFillCheck.getText().toString())) {
    
                Toast.makeText(getActivity(), "Please fill in all fields", 
                Toast.LENGTH_SHORT).show();
    
                Intent intent = new Intent(getActivity(), SignupFragment.class);
                startActivity(intent);
            }
            else{
             Toast.makeText(getActivity(), textFillCheck.getText().toString(), 
             Toast.LENGTH_LONG).show();
            }
        }
    });
      }
    

    【讨论】:

    • 应用程序现在启动但不显示片段布局组件。
    • 那是因为你只是在制定意图并开始活动
    猜你喜欢
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 2022-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多