从自定义适配器更新menuItem图标

开发者

我在片段中有一个Gridview列表。我正在使用自定义适配器,并且它的xml具有可单击的imageview(用于“收藏夹”)。

现在,我有了使用常规menu.xml在操作栏上显示图标的操作栏。我有自定义XML以显示带有文本计数器的图标。

因此,在menu.xml中,我调用了以下内容:其中act_fav是具有imageview和textview的xml。

    <item
    android:id="@+id/action_fav"
    android:actionLayout="@layout/act_fav"
    android:icon="@drawable/ic_starnofill"
    android:showAsAction="ifRoom"
    android:title="@string/action_fav"/>

act_fav-具有imageView和textView用于在其上方显示图像。

现在,每当我单击“收藏夹”图标时,如何更新MenuItem图标,并从CustomAdapter向操作栏中的textView添加值?

我可以通过调用以下内容来执行以下操作:

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) 
{   
    RelativeLayout favLayout = (RelativeLayout) menu.findItem(R.id.action_fav).getActionView();
    favLayout.setVisibility(View.VISIBLE);
    favTV = (TextView) favLayout.findViewById(R.id.fav_number);
    favTV.setText("12");

    super.onCreateOptionsMenu(menu,inflater);
}

但是,如何从“定制适配器”中调用相同的名称?

让我知道!

巴夫迪普·萨加尔(Bhavdip Sagar)

如果要通过单击定制适配器来更新菜单项,则可以创建全局菜单对象以在整个活动/片段中访问它。我们假设认为为什么我们不应该使用findViewById(R.id)访问菜单项。您不能将findViewById用于菜单项。简而言之,您可以按照以下步骤操作。

  1. 创建菜单对象。

    私人菜单mMenu;

  2. 在您的onCreateOptionsMenu()中

    this.menu =菜单;

  3. 在“自定义适配器收藏夹”按钮中,单击事件。

    menu.getItem(0).setIcon(getResources()。getDrawable(R.drawable.ic_launcher));;

例如 :

package test.actionbariconupdate;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
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.Button;
import android.widget.ImageView;


public class ActionBarIconUpdate extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_action_bar_icon_update2);
        if (savedInstanceState == null) {
            getFragmentManager().beginTransaction()
                    .add(R.id.container, new PlaceholderFragment())
                    .commit();
        }
    }


    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }

    /**
     * A placeholder fragment containing a simple view.
     */
    public static class PlaceholderFragment extends Fragment {

        private Menu mMenu;
        private Button buttonclick;

        public PlaceholderFragment() {
        }

        @Override
        public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
            inflater.inflate(R.menu.menu_action_bar_icon_update, menu);
            this.mMenu = menu;
            super.onCreateOptionsMenu(menu, inflater);

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {
            setHasOptionsMenu(true);
            View rootView = inflater.inflate(R.layout.fragment_action_bar_icon_update, container, false);
            buttonclick = (Button)rootView.findViewById(R.id.buttonclick);
            buttonclick.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(mMenu != null){
                        ImageView imageView  = (ImageView) mMenu.getItem(0).getActionView().findViewById(R.id.menu_icon);
                        imageView.setBackground(getResources().getDrawable(R.drawable.icon));
                    }
                }
            });
            return rootView;
        }
    }
}

menu_action_bar_icon_update.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    >
    <item
        android:id="@+id/action_settings"
        android:title="@string/action_settings"
        android:showAsAction="always"
        android:actionLayout="@layout/action_menu"/>
</menu>

@ layout / action_menu.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ImageView
        android:id="@+id/menu_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/ic_launcher" />
</LinearLayout>

我运行此代码,便能够动态更改图标。希望对您有帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

更新Recyclerview的自定义适配器的ViewHolder值

来自分类Dev

无法更新自定义适配器中的项目

来自分类Dev

自定义适配器的问题

来自分类Dev

ListView的自定义适配器

来自分类Dev

自定义ListView的适配器

来自分类Dev

Android:在自定义适配器中加载应用程序图标

来自分类Dev

Android:在自定义适配器中加载应用程序图标

来自分类Dev

自定义GridView适配器中的TextView不会更新,但是ImageView会更新

来自分类Dev

具有基本适配器列表项的自定义适配器重复

来自分类Dev

自定义适配器中的复选框以更新数据库

来自分类Dev

自定义适配器中的复选框不会更新

来自分类Dev

使用swipeRefreshLayout更新自定义适配器中的数据

来自分类Dev

自定义listview适配器中的clear()也会更新列表数据

来自分类Dev

自定义适配器中的复选框不会更新

来自分类Dev

在自定义适配器类中更新操作栏菜单

来自分类Dev

在自定义光标适配器中不断更新textview

来自分类Dev

按下按钮后,更新自定义适配器中的视图

来自分类Dev

回到活动中时,使用自定义基本适配器更新Listview吗?

来自分类Dev

具有自定义适配器的listview中的Textview不会更新

来自分类Dev

在内部按钮上单击以更新自定义适配器内容

来自分类Dev

片段中的自定义阵列适配器

来自分类Dev

Android自定义适配器如何工作?

来自分类Dev

为什么自定义适配器需要资源?

来自分类Dev

android:带有自定义适配器的AutoCompleteTextView

来自分类Dev

使用自定义适配器的Android数据绑定

来自分类Dev

Android自定义阵列适配器未运行

来自分类Dev

自定义适配器不显示数据

来自分类Dev

Emberjs-自定义适配器

来自分类Dev

如何从自定义基本适配器调用函数

Related 相关文章

  1. 1

    更新Recyclerview的自定义适配器的ViewHolder值

  2. 2

    无法更新自定义适配器中的项目

  3. 3

    自定义适配器的问题

  4. 4

    ListView的自定义适配器

  5. 5

    自定义ListView的适配器

  6. 6

    Android:在自定义适配器中加载应用程序图标

  7. 7

    Android:在自定义适配器中加载应用程序图标

  8. 8

    自定义GridView适配器中的TextView不会更新,但是ImageView会更新

  9. 9

    具有基本适配器列表项的自定义适配器重复

  10. 10

    自定义适配器中的复选框以更新数据库

  11. 11

    自定义适配器中的复选框不会更新

  12. 12

    使用swipeRefreshLayout更新自定义适配器中的数据

  13. 13

    自定义listview适配器中的clear()也会更新列表数据

  14. 14

    自定义适配器中的复选框不会更新

  15. 15

    在自定义适配器类中更新操作栏菜单

  16. 16

    在自定义光标适配器中不断更新textview

  17. 17

    按下按钮后,更新自定义适配器中的视图

  18. 18

    回到活动中时,使用自定义基本适配器更新Listview吗?

  19. 19

    具有自定义适配器的listview中的Textview不会更新

  20. 20

    在内部按钮上单击以更新自定义适配器内容

  21. 21

    片段中的自定义阵列适配器

  22. 22

    Android自定义适配器如何工作?

  23. 23

    为什么自定义适配器需要资源?

  24. 24

    android:带有自定义适配器的AutoCompleteTextView

  25. 25

    使用自定义适配器的Android数据绑定

  26. 26

    Android自定义阵列适配器未运行

  27. 27

    自定义适配器不显示数据

  28. 28

    Emberjs-自定义适配器

  29. 29

    如何从自定义基本适配器调用函数

热门标签

归档