android动作栏菜单按钮事件处理问题

时间:2015-01-20 12:03:52

标签: android button android-actionbar

我的片段中有操作按钮,我在互联网上按照一些教程,我已经设法在我的片段中显示我的操作按钮。但由于未知的原因,当我点击动作按钮时没有任何反应。

这是我的xml菜单

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:yourapp="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <item android:id="@+id/send_card"
        android:icon="@drawable/btn_add"
        android:title="send card"
        yourapp:showAsAction="always"

        />

</menu>

包com.dycode.durexlovers.fragment;

import android.app.AlertDialog;
import android.app.Fragment;
import android.app.ProgressDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.HorizontalScrollView;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.androidquery.AQuery;
import com.dycode.durexlovers.R;
import com.dycode.durexlovers.adapter.HorizontalListViewCardAdapter;
import com.dycode.durexlovers.adapter.MomentAdapter;
import com.dycode.durexlovers.adapter.SpiceItUpAdapter;
import com.dycode.durexlovers.adapter.ViewPagerAdapter;
import com.dycode.durexlovers.api.CardApi;
import com.dycode.durexlovers.api.MomentApi;
import com.dycode.durexlovers.card.PreviewCard;
import com.dycode.durexlovers.card.SendCard;
import com.dycode.durexlovers.dao.CardDao;
import com.dycode.durexlovers.dao.MomentDao;
import com.dycode.durexlovers.utils.Constant;
import com.dycode.durexlovers.utils.SessionManager;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

import it.sephiroth.android.library.widget.AdapterView;
import it.sephiroth.android.library.widget.HListView;

/**
 * Created by Minecraft on 06/01/2015.
 */
public class SpiceItUpFragment extends Fragment {

    LinearLayout stripRomantic, stripRomanticAct, stripTease, stripTeaseAct, stripIntimate, stripIntimateAct;
    Button btnRomantic, btnTease, btnIntimate, btnNext, btnBack, btnSendCard;
    HListView hListView;
    private CardApi cardApi;
    private List<CardDao> listCard = new ArrayList<CardDao>();
    HorizontalListViewCardAdapter adapter;
    ProgressDialog dialog;
    SessionManager sessionManager;
    String email;
    TextView tvNameCard, tvDescCard;
    ImageView ivCard;
    AQuery aQuery;
    int pos;
    String categoryCard;


    public SpiceItUpFragment() {
    }

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

        View rootView = inflater.inflate(R.layout.fragment_spice_it_up, container, false);


        stripRomantic = (LinearLayout) rootView.findViewById(R.id.strip_tab_romantic);
        stripRomanticAct = (LinearLayout) rootView.findViewById(R.id.strip_tab_romantic_active);
        stripTease = (LinearLayout) rootView.findViewById(R.id.strip_tab_tease);
        stripTeaseAct = (LinearLayout) rootView.findViewById(R.id.strip_tab_tease_active);
        stripIntimate = (LinearLayout) rootView.findViewById(R.id.strip_tab_intimate);
        stripIntimateAct = (LinearLayout) rootView.findViewById(R.id.strip_tab_intimate_active);

        btnRomantic = (Button) rootView.findViewById(R.id.btnRomantic);
        btnTease = (Button) rootView.findViewById(R.id.btnTease);
        btnIntimate = (Button) rootView.findViewById(R.id.btnIntimate);
        btnNext = (Button) rootView.findViewById(R.id.btnNext);
        btnBack = (Button) rootView.findViewById(R.id.btnBack);
        btnSendCard = (Button) rootView.findViewById(R.id.btnSendCard);
        hListView = (HListView) rootView.findViewById(R.id.hListView);


        tvNameCard = (TextView) rootView.findViewById(R.id.tvNameCard);
        tvDescCard = (TextView) rootView.findViewById(R.id.tvDescCard);
        ivCard = (ImageView) rootView.findViewById(R.id.ivCard);
        aQuery = new AQuery(getActivity());


        cardApi = new CardApi(getActivity(), cardListener);
        adapter = new HorizontalListViewCardAdapter(getActivity(), listCard);
        hListView.setAdapter(adapter);
        sessionManager = new SessionManager(getActivity());
        // get user data from session
        HashMap<String, String> user = sessionManager.getUserDetails();
        email = user.get(sessionManager.KEY_EMAIL);
        categoryCard = "romantic";
        cardApi.callApiCard(email, categoryCard);

        //hListView.setAdapter( new ArrayAdapter<String>( getActivity(), R.layout.card_horizontal_list_item, activities ) );


        btnRomantic.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!categoryCard.equalsIgnoreCase("romantic")){
                    categoryCard = "romantic";
                    stripRomantic.setVisibility(View.INVISIBLE);
                    stripRomanticAct.setVisibility(View.VISIBLE);
                    stripTease.setVisibility(View.VISIBLE);
                    stripTeaseAct.setVisibility(View.INVISIBLE);
                    stripIntimate.setVisibility(View.VISIBLE);
                    stripIntimateAct.setVisibility(View.INVISIBLE);
                    cardApi.callApiCard(email, categoryCard);
                }

            }
        });

        btnTease.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!categoryCard.equalsIgnoreCase("tease")){
                    categoryCard = "tease";
                    stripTease.setVisibility(View.INVISIBLE);
                    stripTeaseAct.setVisibility(View.VISIBLE);
                    stripRomantic.setVisibility(View.VISIBLE);
                    stripRomanticAct.setVisibility(View.INVISIBLE);
                    stripIntimate.setVisibility(View.VISIBLE);
                    stripIntimateAct.setVisibility(View.INVISIBLE);
                    cardApi.callApiCard(email,categoryCard);
                }

            }
        });

        btnIntimate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(!categoryCard.equalsIgnoreCase("intimate")){
                    categoryCard = "intimate";
                    stripIntimate.setVisibility(View.INVISIBLE);
                    stripIntimateAct.setVisibility(View.VISIBLE);
                    stripTease.setVisibility(View.VISIBLE);
                    stripTeaseAct.setVisibility(View.INVISIBLE);
                    stripRomantic.setVisibility(View.VISIBLE);
                    stripRomanticAct.setVisibility(View.INVISIBLE);
                    cardApi.callApiCard(email,categoryCard);
                }

            }
        });


        hListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                pos = position;
                tvNameCard.setText(listCard.get(position).getNameCard());
                tvDescCard.setText(listCard.get(position).getDescriptionCard());
                String urlCard = Constant.URLImage.CARD + listCard.get(position).getImageCard();
                aQuery.id(ivCard).image(urlCard);
            }
        });

        btnNext.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (pos < listCard.size()-1) {
                    pos = pos + 1;
                    tvNameCard.setText(listCard.get(pos).getNameCard());
                    tvDescCard.setText(listCard.get(pos).getDescriptionCard());
                    String urlCard = Constant.URLImage.CARD + listCard.get(pos).getImageCard();
                    aQuery.id(ivCard).image(urlCard);

                }
            }
        });

        btnBack.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (pos > 0) {
                    pos = pos - 1;
                    tvNameCard.setText(listCard.get(pos).getNameCard());
                    tvDescCard.setText(listCard.get(pos).getDescriptionCard());
                    String urlCard = Constant.URLImage.CARD + listCard.get(pos).getImageCard();
                    aQuery.id(ivCard).image(urlCard);
                }
            }
        });

        btnSendCard.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(getActivity(), PreviewCard.class);
                i.putExtra("id",listCard.get(pos).getIdCard());
                i.putExtra("name",listCard.get(pos).getNameCard());
                i.putExtra("desc",listCard.get(pos).getDescriptionCard());
                String urlCard = Constant.URLImage.CARD + listCard.get(pos).getImageCard();
                i.putExtra("url",urlCard);
                startActivity(i);
            }
        });
        setHasOptionsMenu(true);
        return rootView;

    }

    CardApi.ApiResultListener cardListener = new CardApi.ApiResultListener() {
        @Override
        public void onApiResultOk(List<CardDao> listData) {
            if (dialog != null)
                dialog.dismiss();
            listCard.clear();
            listCard.addAll(listData);
            adapter.notifyDataSetChanged();
            pos = listCard.size() / 2;
            tvNameCard.setText(listCard.get(pos).getNameCard());
            tvDescCard.setText(listCard.get(pos).getDescriptionCard());
            String urlCard = Constant.URLImage.CARD + listCard.get(pos).getImageCard();
            aQuery.id(ivCard).image(urlCard);


        }

        @Override
        public void onApiPreCall() {
            dialog = ProgressDialog.show(getActivity(), "", "loading...");

        }

        @Override
        public void onApiResultError(String errorMessage) {
            showDialogNotification(errorMessage);
            if (dialog != null)
                dialog.dismiss();

        }
    };

    private void showDialogNotification(String message) {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                getActivity());

        alertDialogBuilder.setTitle("Notification");
        alertDialogBuilder.setMessage(message).setCancelable(false)
                .setNeutralButton("Ok", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {


                    }
                });

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }

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

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        super.onOptionsItemSelected(item);
        // Handle presses on the action bar items
        switch (item.getItemId()) {
            case R.id.send_card:
                Intent i = new Intent(getActivity(), PreviewCard.class);
                i.putExtra("id",listCard.get(pos).getIdCard());
                i.putExtra("name",listCard.get(pos).getNameCard());
                i.putExtra("desc",listCard.get(pos).getDescriptionCard());
                String urlCard = Constant.URLImage.CARD + listCard.get(pos).getImageCard();
                i.putExtra("url",urlCard);
                startActivity(i);
                return true;
            default:
                return super.onOptionsItemSelected(item);

        }
    }


}

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

如下所示更改您的方法。您需要调用super.onCreateOptionsMenu,如下所示

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

并设置setHasOptionsMenu(true);在你的oncreateview befor return v;