为自定义操作栏项设置onClick事件

时间:2015-05-04 17:23:14

标签: android android-actionbar onclicklistener

当我尝试在Custom ActionBar项目上添加onClick事件时,我遇到异常。当我点击ActionBar中的<RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:background="@color/tabbackground" xmlns:android="http://schemas.android.com/apk/res/android"> <EditText android:id="@+id/actionsearchtext" android:layout_width="230dp" android:layout_height="wrap_content" android:textSize="15dp" android:textColor="#000000" android:visibility="gone" android:maxLines="1" android:singleLine="true" android:padding="7dp" android:layout_marginTop="10dp" android:layout_marginLeft="10dp" android:hint="Search for all GIFs" android:textColorHint="#544E4B" android:layout_toLeftOf="@+id/usericonlayout" android:background="@color/border_gray" /> <RelativeLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:id="@+id/usericonlayout" > <ImageView android:layout_width="30dp" android:layout_height="30dp" android:id="@+id/searchiconactionbar" android:paddingLeft="4dp" android:paddingRight="4dp" android:layout_centerInParent="true" android:onClick="clickEvent" android:layout_marginLeft="5dp" android:src="@drawable/search" /> </RelativeLayout> </RelativeLayout> 时,我的应用程序崩溃了。我只在活动中放置onClick()方法。为什么我收到此错误吗?是否有其他方法为自定义ActionBar项设置onClickListener?

        LayoutInflater mInflater2 = LayoutInflater.from(this);
        View mCustomView2 = mInflater.inflate(R.layout.actionbar_gip, null);
  searchtext=(EditText)mCustomView2.findViewById(R.id.actionsearchtext);
        searchIcon=(ImageView)mCustomView2.findViewById(R.id.searchiconactionbar);
          getSupportActionBar().setCustomView(R.layout.actionbar_gip);
   public void clickEvent(View v) {
        if (v.getId() == R.id.searchiconactionbar) {
            if (searchtext.getVisibility() == View.GONE)
                expand(searchtext);
            else
                collapse(searchtext);
        }

    }

actionbar_gip

def update_multiple
  begin
    User.transaction do
      params[:users].each do |k, v|
      User.find(k).update!(v)
    end
    flash[:notice] = "Update Successful"
    redirect_to :users and return
  end
  rescue
    @users = []
    params[:users].each do |k,v|
      @users.push(User.new({:id => k}.merge(v))) 
    end
    flash[:error] = "Errors found"
    render :edit_multiple and return
  end
end

代码 -

Parameters: {"utf8"=>"✓", "authenticity_token"=>"xyz=", "users"=>{"15"=>
{"name"=>"Neil", "age"=>"11"}, "16"=>{"name"=>"z", "age"=>"33"}, "17"=>
{"name"=>"John", "age"=>"99"}}, "commit"=>"Submit Changes"}

2 个答案:

答案 0 :(得分:0)

更换

getSupportActionBar().setCustomView(R.layout.actionbar_gip);

通过

 getSupportActionBar().setCustomView(mCustomView2);

解决了我的问题..

答案 1 :(得分:0)

以下是一个示例,其中包含操作栏中自定义视图的onClick()功能。

自定义操作栏的布局:

<ImageView
    android:id="@+id/custom_actionbar_back_iv"
    android:layout_width="@dimen/small_margin_ar"
    android:layout_height="@dimen/very_small_margin_ar"
    android:layout_alignParentLeft="true"
    android:layout_centerVertical="true"
    android:src="@drawable/up_navigation"/>

<TextView
    android:id="@+id/custom_actionbar_titleText_tv"
    style="@style/wrapscreen"
    android:layout_centerVertical="true"
    android:layout_toRightOf="@+id/custom_actionbar_back_iv"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="@color/white"
    android:textSize="@dimen/above_medium_text_size" />

<ImageButton
    android:id="@+id/custom_actionbar_goToArchiveActivity_ib"
    style="@style/wrapscreen"
    android:layout_alignParentRight="true"
    android:layout_centerVertical="true"
    android:layout_marginRight="@dimen/medium_margin"
    android:background="@null"
    android:src="@drawable/ic_action_overflow" />

这是实施..

在onCreate()方法中定义setupactionBar()方法

private void setUpActionBar() {
        ActionBar actionBar = getActionBar();
        actionBar.setDisplayShowHomeEnabled(false);
        actionBar.setDisplayShowTitleEnabled(false);

        LayoutInflater layoutInflater = LayoutInflater.from(this);
        View customActionBarView = layoutInflater.inflate(R.layout.custom_actionbar, null);

        // this view is used to show tile
        TextView ActivityTitleTV = (TextView) customActionBarView.findViewById(R.id.custom_actionbar_titleText_tv);
        ActivityTitleTV.setText(R.string.title_text_archive);

        //this view can be used for back navigation
        ImageView backToRecorderIV = (ImageView) customActionBarView.findViewById(R.id.custom_actionbar_back_iv);
        backToRecorderIV.setVisibility(View.VISIBLE);
        backToRecorderIV.setOnClickListener(this);

        //Another view which has up navigation
        ImageButton goToArchiveActivityIB = (ImageButton) customActionBarView.findViewById(R.id.custom_actionbar_goToArchiveActivity_ib);
        goToArchiveActivityIB.setVisibility(View.GONE);

        actionBar.setCustomView(customActionBarView);
        actionBar.setDisplayShowCustomEnabled(true);
    }

    //listener for back navigation
    @Override
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.custom_actionbar_back_iv:
                Intent recorder = new Intent(ArchiveActivity.this, RecorderActivity.class);
                startActivity(recorder);
                finish();
                break;
        }
    }

希望这会有所帮助......