0

ListViewにコンテキストメニューがあります。

ログインしているユーザー向けに、特別な場合のコンテキストリストアイテムを追加したいと思います。

コメントのリストがあるとしましょう。ただし、ログインしたユーザーのコメントに対してのみ、「編集」と呼ばれる特別なコンテキストリストアイテムがあります(明らかに、他のユーザーが自分以外のコメントを編集できないようにする必要があります。

これが私のクラス拡張アプリケーションで、通常はログインしているユーザーをチェックインします。

public class MyApp extends Application {

    public static boolean isUserLoggedIn = false;
    public static String username = null;
    public static SharedPreferences logInState;
    public static int ratescreen = 0;

    public static boolean userLogin() {

        return MyApp.isUserLoggedIn = true;
    }

    public static boolean userLogout() {

        return MyApp.isUserLoggedIn = false;
    }

    public static void setUser(String s) {

        MyApp.username = s;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        String PREFS_NAME = "LoginState";
        logInState = getSharedPreferences(PREFS_NAME,
                MODE_PRIVATE);
    }

}

これが私のコンテキストメニューです:

@Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {

            super.onCreateContextMenu(menu, v, menuInfo);
            MenuInflater inflater = getActivity().getMenuInflater();
            inflater.inflate(R.menu.reviews_context, menu);
            menu.setHeaderTitle("Mark Comment as ...");
        }

        @Override
        public boolean onContextItemSelected(MenuItem item) {

            switch (item.getItemId()) {
            case R.id.helpful:

                new HelpfulTask().execute();

                Toast.makeText(getActivity(), "You have voted this up!",
                        Toast.LENGTH_SHORT).show();

                return true;
            case R.id.unhelpful:

                new UnHelpfulTask().execute();

                Toast.makeText(getActivity(), "You have voted this down!",
                        Toast.LENGTH_SHORT).show();

                return true;

            case R.id.spam:

                new SpamTask().execute();

                Toast.makeText(getActivity(),
                        "You have reported this as Spam or Offensive.",
                        Toast.LENGTH_SHORT).show();

                return true;

                    // Would like to add fourth option here but conditional if it is a comment from the currently logged in user.


            }
            return false;

        }
4

2 に答える 2

2

アイテムを追加するのは簡単Editで、ユーザーのログインステータスによって異なります。onCreateContextMenu

    @Override
        public void onCreateContextMenu(ContextMenu menu, View v,
                ContextMenuInfo menuInfo) {
            // TODO Auto-generated method stub

            super.onCreateContextMenu(menu, v, menuInfo);
    // check if user logged-in so add Edit item to context menu.
            if (userLogin()) {
                menu.add(0, MENU_ITEM_EDIT, 0, R.string.menu_edit);
            }
//Add normall others menu items
            menu.add(0, MENU_ITEM_CALL, 0, R.string.menu_callContact);



        }
于 2012-10-01T01:49:54.673 に答える
0

ContextMenuInfoをListViewのAdapterView.AdapterContextMenuInfoにキャストして、アダプター(独自の実装)にアクセスするコンテンツを変更することができます。

AdapterView.AdapterContextMenuInfo contextMenuInfo = (AdapterView.AdapterContextMenuInfo)menuInfo;
        MyAdapter adapter = (MyAdapter)getListView().getAdapter();
adapter.remove(contextMenuInfo.position);
于 2012-09-30T16:12:17.480 に答える