Промяна на елементи от менюто в лентата за действие sherlock динамично

Внедрих лентата за действие sherlock в приложението си за Android. Това приложение има функционалност за пазарска количка. В лентата с действия има икона, която отвежда потребителя до количката. Трябва да променя динамично тази икона, когато артикулите се добавят в количката и се премахват от нея. Това е число, което трябва да се появи в горната част на иконата на количката в лентата за действие.

По-долу има екранна снимка:

въведете описание на изображението тук

Menu.xml:

<menu xmlns:android="http://schemas.android.com/apk/res/android" >

    <item
        android:id="@+id/scanner"
        android:icon="@drawable/ic_nav_scanner"
        android:showAsAction="always"
        android:title="@string/scanner"/>
    <item
        android:id="@+id/cart"
        android:icon="@drawable/ic_nav_cart"
        android:showAsAction="always"
        android:title="@string/cart"/>
    <item
        android:id="@+id/a_More"
        android:icon="@drawable/ic_nav_more"
        android:showAsAction="always"
        android:title="@string/more">
        <menu>
             <item
                android:id="@+id/location"
                android:icon="@drawable/ic_nav_dropdown_location"
                android:showAsAction="always"
                android:title="@string/location_action"/>

            <item
                android:id="@+id/fav"
                android:icon="@drawable/ic_nav_dropdown_favourite"
                android:showAsAction="always"
                android:title="@string/favourites"/>
            <item
                android:id="@+id/info"
                android:icon="@drawable/ic_nav_dropdown_information"
                android:title="@string/information"/>
        </menu>
    </item>

</menu>

Код:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getSupportMenuInflater();
        inflater.inflate(R.menu.aiwmain, menu);
        return super.onCreateOptionsMenu(menu);
    }

@Override
    public boolean onOptionsItemSelected(MenuItem item) {

        super.onOptionsItemSelected(item);

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

            //scanner clicked
            break;
}

Оценява се всяка помощ за динамична промяна на иконата на количката в лентата с действия.

//РЕДАКТИРАНЕ

Успях да измисля това малко:

@Override
    public boolean onPrepareOptionsMenu(Menu menu) {

        DBManager db = DBManager.getSingletonInstance();
        int cartItemCount = db.getCartItemCount(this);
        MenuItem cart = menu.findItem(R.id.cart);
        MenuItem scanner = menu.findItem(R.id.scanner);

        if(cartItemCount > 0){
                    //I want this item to be changed, I do not want to have seperate      drawables for all numbers.
            cart.setIcon(R.drawable.arrow_left);
        }

        return super.onPrepareOptionsMenu(menu);
    }

person TharakaNirmana    schedule 21.11.2013    source източник
comment
трябва да добавите новия си елемент от менюто, като замените onpreparemenuoptions()   -  person Nitin Misra    schedule 21.11.2013
comment
Имате ли примерен код за това?   -  person TharakaNirmana    schedule 21.11.2013


Отговори (3)


Измислих отговор, който отговаря на въпроса ми, проектирах персонализирано оформление за елемента от менюто CART:

badge.xml:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="48dp"
    android:layout_height="fill_parent"
    android:clickable="true"
    style="@android:style/Widget.ActionButton" >

    <!-- Menu Item Image -->
    <ImageView
        android:id="@+id/img_view"
        android:layout_width="48dp"
        android:layout_height="fill_parent"
        android:clickable="true"
        android:background="@drawable/ic_nav_cart" />

    <!-- Badge Count -->

    <TextView
        android:id="@+id/actionbar_notifcation_textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="99"
        android:textColor="#9F2828"
        android:textSize="14sp"
        android:layout_toRightOf="@+id/img_view"
        android:background="@drawable/cart_circle"/>

</RelativeLayout>

В моя menu.xml го включвам по следния начин:

<item
        android:id="@+id/cart"
        android:actionLayout="@layout/badge"
        android:icon="@drawable/ic_nav_cart"
        android:showAsAction="always"
        android:title="@string/cart"/>

След това в моята дейност го използвам така:

@Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getSupportMenuInflater();
        inflater.inflate(R.menu.aiwmain, menu);

        //getting the count of cart items
        DBManager db = DBManager.getSingletonInstance();
        int cartItemCount = db.getCartItemCount(this);

        badgeLayout = (RelativeLayout) menu.findItem(R.id.cart).getActionView();
        menu.getItem(1).getActionView().setOnClickListener(this);
        TextView tv = (TextView) badgeLayout.findViewById(R.id.actionbar_notifcation_textview);
        tv.setText(""+cartItemCount);
        //do not show the count if count is 0
        if(cartItemCount == 0){
            tv.setVisibility(View.GONE);
        }
        return super.onCreateOptionsMenu(menu);
    }

Горният метод е в BaseActivity, от който всички други дейности наследяват. Следователно не е необходимо да включвате това във всички дейности.

За да обработите onClick на ИКОНАТА НА КОЛИЧКАТА, направете това във всички дейности:

public void onClick(View v) {
    // navigating to the cart details by checking the ids of menu item and
    // clicked layout.
    if (v.getId() == R.id.cart) {
        Intent order = new Intent(getApplicationContext(), CartDetailsActivity.class);
        startActivity(order);
    }
}

Справка: Как да получа текст върху икона на ActionBar?

person TharakaNirmana    schedule 12.12.2013

Използвам тази (ViewBadger) библиотека за това.

person WOLVERINE    schedule 21.11.2013
comment
Изглежда, че това не помага на изискването ми: github.com/jgilfelt/android-viewbadger/issues /2 не поддържа в лентата за действие sherlock.. - person TharakaNirmana; 11.12.2013
comment
невероятно, но го използвам :) - person WOLVERINE; 11.12.2013
comment
с елемент от менюто на лентата за действие шерлок? - person TharakaNirmana; 11.12.2013

person    schedule
comment
Искам този елемент да бъде променен, не искам да имам отделни чертежи за всички числа. моля, проверете редактирания въпрос. - person TharakaNirmana; 11.12.2013