接口回调未调用:on Fragment重写的方法未从Home Fragment中的menuItemListener调用

时间:2019-06-26 08:59:06

标签: android android-fragments interface

我在MainActivity中有一个菜单项是filter(sort),我希望如果用户单击MainActivity's onClick中的诸如Az(升序)或za(降序)之类的过滤器菜单,单击,但我也想得到片段的认可 为什么听众不打电话?

HomeFragment:

public class HomeFragment extends Fragment implements AdapterInterface, HamburgerMenuInterface, Callback<String>, SearchListener, MenuItemListener {
    private static final String TAG = HomeFragment.class.getSimpleName();
    public MainActivity activity;
    public Context context;
    View view;
    private DatabaseAdapter dbAdapter;
    private List<Reminder> listItems = new ArrayList<>();
    private ReminderListAdapter listAdapter;
    private MenuItemListener menuItemListener;
    private RecyclerView listView;
    private TextView tvNoData;
    private AlertDialog.Builder builder;
    private Reminder reminder;
    private long reminderId = 0;
    private int getFavorite = 0;

    public HomeFragment() {
    }


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


 @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        this.menuItemListener = (MenuItemListener) getActivity();
        showLog("attached");
    }


    private void showLog(String msg) {
        Log.d(TAG, msg);
    }

    @Override
    public void onFilterItem(int position) {
        showLog("test: " + position);
    }

MainActivity:

public class MainActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener, AdapterInterface, HamburgerMenuInterface, SearchListener, MenuItemListener {
    private static final String TAG = MainActivity.class.getSimpleName();

    @BindView(R.id.toolbar)
    Toolbar toolbar;
    @BindView(R.id.recycler_view)
    RecyclerView listView;

    private String phoneNum = null, getImage = null, getUsername = null;
    private int first = 0, position = 0;
    private ActionBar actionBar;
    private DatabaseAdapter dbAdapter;
    private ReminderListAdapter listAdapter;
    private List<Reminder> listItems = new ArrayList<>();
    private TabLayout tabLayout;
    private ViewPager viewPager;
    private MenuItemListener menuItemListener;
    private DrawerLayout drawer;
    private SharedPreferences profilePreference;
    private TextView navUsername, navMobile;
    private ImageView navImage;
    private View headerView;
    private NavigationView navigationView;
    private SharedPreferences.Editor editor;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        CREATE_PASSCODE_ACTIVITY = 0;
        setThemeAndLoadLocale(MainActivity.this);
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }

    private void init() {
        ButterKnife.bind(this);
        setToolbar(toolbar, getString(R.string.app_name));
        profilePreference = getSharedPreferences(PROFILE, MODE_PRIVATE);
        getDataPhoneNumber();
        tabLayout = findViewById(R.id.tab_layout);
        viewPager = findViewById(R.id.view_pager);
        drawer = findViewById(R.id.drawer_layout);
        navigationView = findViewById(R.id.nav_view);
        headerView = navigationView.getHeaderView(0);
        navUsername = headerView.findViewById(R.id.profile_name);
        navMobile = headerView.findViewById(R.id.mobile_number);
        navImage = headerView.findViewById(R.id.profile_image);

        if (!phoneNum.isEmpty()) {
            first = 1;
            getProfileData();
        }

        Menu menu = navigationView.getMenu();
        MenuItem tools = menu.findItem(R.id.nav_general_setting);
        SpannableString s = new SpannableString(tools.getTitle());
        s.setSpan(new TextAppearanceSpan(this, R.style.nav_header_color), 0, s.length(), 0);
        tools.setTitle(s);

        Menu menu2 = navigationView.getMenu();
        MenuItem tools2 = menu2.findItem(R.id.nav_communicate);
        SpannableString s2 = new SpannableString(tools2.getTitle());
        s2.setSpan(new TextAppearanceSpan(this, R.style.nav_header_color), 0, s2.length(), 0);
        tools2.setTitle(s2);

        navigationView.setNavigationItemSelectedListener(this);

        ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(this, drawer, toolbar,
                R.string.navigation_drawer_open, R.string.navigation_drawer_close);
        drawer.addDrawerListener(toggle);
        toggle.syncState();

        ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager());

        adapter.AddFragment(new HomeFragment(), getResources().getString(R.string.fragment_home));
        adapter.AddFragment(new OfficeFragment(), getResources().getString(R.string.fragment_office));
        adapter.AddFragment(new OtherFragment(), getResources().getString(R.string.fragment_other));


        viewPager.setAdapter(adapter);
        tabLayout.setupWithViewPager(viewPager);


        listAdapter = new ReminderListAdapter(this, listItems, MainActivity.this, this, this);
        listView.setHasFixedSize(true);
        final LinearLayoutManager mLayoutManager;
        mLayoutManager = new LinearLayoutManager(this);
        listView.setLayoutManager(mLayoutManager);
        listView.setItemAnimator(new DefaultItemAnimator());
        try {
            listView.setAdapter(listAdapter);
        } catch (Exception exp) {
            exp.printStackTrace();
        }


        FloatingActionButton fab = findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                startActivity(new Intent(MainActivity.this, AddReminderActivity.class));
            }
        });


        dbAdapter = new DatabaseAdapter(this);
        menuItemListener = this;
    }




 public boolean onOptionsItemSelected(MenuItem item) {
        int id = item.getItemId();
        switch (id) {
            case R.id.search:
                Intent intent = new Intent(MainActivity.this, SearchActivity.class);
                startActivityForResult(intent, PICK_SEARCH);
                break;

            case R.id.filter:
                break;

            case R.id.ascending:
                showLog("ascending: " + menuItemListener);
                if (menuItemListener != null) {
                    menuItemListener.onFilterItem(1);
                }
                break;

            case R.id.descending:
                showLog("descending: " + menuItemListener);
                if (menuItemListener != null) {
                    menuItemListener.onFilterItem(2);
                }
                break;
        }
        return super.onOptionsItemSelected(item);
    }

MainActivity的OnCreate最后一行:

menuItemListener = this;

0 个答案:

没有答案