操作栏项目是可点击的,但不响应片段中的事件

Posted

技术标签:

【中文标题】操作栏项目是可点击的,但不响应片段中的事件【英文标题】:Action Bar Items are clickable, but do not respond to events in a Fragment 【发布时间】:2019-01-13 15:31:31 【问题描述】:

基本上我的项目必须有不同的工具栏,一个用于底部导航栏切换的每个片段。 片段工具栏项目是可点击的,当我长按时,显示标题项目等,但它们不执行操作。例如,当我设置在单击该项目时显示敬酒时,他将不会执行。有什么建议吗?谢谢。

public class FeedFragment extends Fragment 

    public static final String TAG = "Tag Free";

    DialogFragment mDialog;
    FloatingActionButton fab;
    RevealFrameLayout reveal;
    FrameLayout frame;
    private ConstraintLayout layoutDialog;
    boolean isOpen = false;

    public FeedFragment() 
        // Required empty public constructor
    

    @Override
    public void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
    

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

        View view = inflater.inflate(R.layout.fragment_feed, container, false);

        /** Toolbar **/
        Toolbar myToolbar = (Toolbar) view.findViewById(R.id.my_toolbar);
        ((AppCompatActivity) getActivity()).setSupportActionBar(myToolbar);

        ActionBar ab = ((AppCompatActivity) getActivity()).getSupportActionBar();
        ab.setDisplayHomeAsUpEnabled(false);

        // navigation bottom
        fab = getActivity().findViewById(R.id.fab_button);
        fab.setImageDrawable(getResources().getDrawable(R.drawable.ic_pencil_black_24dp));
        fab.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View view) 
            FragmentTransaction ft = getFragmentManager().beginTransaction().setCustomAnimations(R.anim.hold, R.anim.slide_down);
            Fragment prev = getFragmentManager().findFragmentByTag("dialog");
            if (prev != null) 
                ft.remove(prev);
            
            ft.addToBackStack(null);
            DialogFragment dialogFragment = new PostDialog();
            dialogFragment.show(ft, "dialog");
            dialogFragment.setStyle(DialogFragment.STYLE_NORMAL, R.style.DialogFragmentTheme);

            
        );

        return view;
    

    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
        inflater.inflate(R.menu.appbar_feed, menu);super.onCreateOptionsMenu(menu, inflater);
    

    @Override
    public boolean onOptionsItemSelected(MenuItem item) 
        switch (item.getItemId()) 
            case R.id.action_personProfile:
            Toast.makeText(getActivity(),"not responding",Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(getActivity(), MyUserProfileActivity.class);
            startActivity(intent);
            return true;

            case R.id.action_settings:
            Toast.makeText(getActivity(),"not responding",Toast.LENGTH_SHORT).show();
            return true;


            default:
            // If we got here, the user's action was not recognized.
            // Invoke the superclass to handle it.
            return super.onOptionsItemSelected(item);
        
    

【问题讨论】:

【参考方案1】:

您没有在活动方法中链接到超类。

重构你的代码如下:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
    inflater.inflate(R.menu.appbar_feed, menu);
    super.onCreateOptionsMenu(menu, inflater);


@Override
public boolean onOptionsItemSelected(MenuItem item) 
    switch (item.getItemId()) 
        case R.id.action_personProfile:
            Toast.makeText(getActivity(),"not responding",Toast.LENGTH_SHORT).show();
            Intent intent = new Intent(getActivity(), MyUserProfileActivity.class);
            startActivity(intent);
            break;

        case R.id.action_settings:
            Toast.makeText(getActivity(),"not responding",Toast.LENGTH_SHORT).show();
            break; 


        default:
            // If we got here, the user's action was not recognized.
            // Invoke the superclass to handle it.
            break; 

    
  return super.onOptionsItemSelected(item);

希望您的代码现在可以正常工作。

【讨论】:

仍然不能使用编辑。也许是我的 Activity 上有什么东西,不是吗? 你能在日志中记录一些看是否触发。让我知道。 您能否为您的特定开关案例调试 item.getItemId()。 我搞定了,看日志prnt.sc/kft95b是Always The Default Option。

以上是关于操作栏项目是可点击的,但不响应片段中的事件的主要内容,如果未能解决你的问题,请参考以下文章

我的 UIView 有一个 UIButton 作为它的子视图之一,但不响应 Objective-c 中的事件

QT Designer 菜单栏事件响应问题。

按下时更改操作栏按钮的背景颜色

关于打开一个新活动以响应对片段内的 RecyclerView 项目的点击

v-on事件修饰符

响应Activity中的ViewPager2 Fragments事件