0

我创建了一个菜单,您可以在其中上下滑动。我将此菜单创建为另一个activity. 现在,我需要将此菜单添加到其他activities.

以下是我的菜单代码(SlidingDrawer)

爪哇

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

public class DropDownMenu extends Activity {

    private TextView addInquiry, addEvent, additionalInfo, addToContacts;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_drop_down_menu);

        //Intializing instance variables
        addInquiry = (TextView)findViewById(R.id.menu_add_inquiry);
        addEvent = (TextView)findViewById(R.id.menu_add_event);
        additionalInfo = (TextView)findViewById(R.id.menu_additional_info);
        addToContacts = (TextView)findViewById(R.id.menu_add_to_contacts);

        //Register the Listeners
        addInquiry.setOnClickListener(new AddInquiryEvent());


    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.drop_down_menu, menu);
        return true;
    }

    //Test Button
    private class AddInquiryEvent implements OnClickListener
    {

        @Override
        public void onClick(View arg0) 
        {
            // TODO Auto-generated method stub
            Intent intent = new Intent(DropDownMenu.this,NewLead.class);
            startActivity(intent);

        }

    }

}

XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent" >

    <SlidingDrawer
        android:id="@+id/SlidingDrawer"
        android:layout_width="wrap_content"
        android:layout_height="250dip"
        android:layout_alignParentBottom="true"
        android:content="@+id/contentLayout"
        android:handle="@+id/slideButton"
        android:orientation="vertical" >

        <Button
            android:id="@+id/slideButton"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:background="@android:drawable/bottom_bar" >
        </Button>

        <LinearLayout
            android:id="@+id/contentLayout"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:padding="10dip"
            android:background="#cbcbcc" >

            <TextView
                android:id="@+id/menu_add_inquiry"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:text="@string/add_inquiry" 
                android:textColor="#ffffff"
                android:clickable="true"
                android:textAppearance="?android:attr/textAppearanceMedium" />




        </LinearLayout>
    </SlidingDrawer>

</RelativeLayout>

以下是其他的代码activity

XML

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/sales_inqury_main_layout"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:clickable="true"
     android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".SalesInqury" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerInParent="true"
        android:text="@string/sales_inqury"
        android:textSize="40sp" />


        <include layout = "@layout/activity_drop_down_menu"
            android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"/>


</RelativeLayout>

爪哇

import android.os.Bundle;
import android.app.Activity;
import android.content.Intent;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

public class SalesInqury extends DropDownMenu {

    private ImageView addNewSalesInqury;
    private RelativeLayout salesInquryMainLayout;
    private TextView testEditSales;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.activity_sales_inqury);

        //Intializing instance variables
        addNewSalesInqury = (ImageView)findViewById(R.id.add_new_sales_inqury_btn);
        salesInquryMainLayout = (RelativeLayout)findViewById(R.id.sales_inqury_main_layout);
        testEditSales = (TextView)findViewById(R.id.testWord);



    }
}

但是,有一个问题。即使我可以在其他活动中打开菜单,我也无法单击它的按钮(TextViews)并导航到其他活动。为什么是这样?

4

4 回答 4

1

我认为这是因为在您的DropDownMenu活动中设置了 contentView 并将侦听器绑定到按钮后,SalesInquiry您设置了不同的 contentView。尽管这包括菜单布局,但视图是重新创建的,因此不再有侦听器绑定到按钮。

一种解决方案是通过android:onClick="..."或通过使用单独的方法在布局 xml 中指定菜单回调,该方法添加侦听器并在设置内容视图从类DropDownMenu中调用。SalesInquiry

示例 1,在 XML 中指定回调

添加android:onClick="onMenuItemClicked"到菜单项TextView

<TextView
        android:id="@+id/menu_add_inquiry"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:text="@string/add_inquiry" 
        android:textColor="#ffffff"
        android:clickable="true"
        android:onClick="onMenuItemClicked"
        android:textAppearance="?android:attr/textAppearanceMedium"/>

将此方法添加到DropDownMenu类并删除AddInquiryEvent类和侦听器的注册。

public void onMenuItemClicked(View view) {
    switch (view.getId()) {
    case R.id.menu_add_inquiry:
        Intent intent = new Intent(DropDownMenu.this,NewLead.class);
        startActivity(intent);
        break;
    case R.id.menu_other:
        // handle other menu item
        break;
    // ... and so on ...
    default:;
    }
}

示例2,在单独的方法中绑定监听器

DropDownMenu将侦听器的注册移动到单独的方法中:

protected void registerListeners() {
    //Register the Listeners
    findViewById(R.id.menu_add_inquiry).setOnClickListener(new AddInquiryEvent());
}

请注意,您必须再次找到视图,因为保存在局部变量中的视图是错误的,SalesInquiry设置为内容视图后。

设置内容视图后调用 SalesInquiry 中的方法。

  setContentView(R.layout.activity_sales_inqury);
  registerListeners();
于 2013-11-06T06:38:23.590 回答
0

一致性问题(推荐)

您的班级名称中有一个巨大的误称,您不应该调用Activity DropDownMenu。这令人困惑,您应该将其称为 DropDownActivity 或类似的名称。另外,您真的需要使用 Activity 吗?您确实意识到 View 仍然可以听到单击按钮的声音吗?不仅 Activity 可以监听按钮点击。如果您将所有这些都封装在一个视图中并为该视图提供一个专用的侦听器,那么您就不需要另一个 Activity。

可能的解决方案

这可能与您注册的监听按钮的活动/组件不正确有关。验证您的代码,以便您至少可以获得 onClick 的正确响应。

于 2013-11-06T06:42:26.417 回答
0

问题是您将侦听器附加addInquiryDropDownMenu

//Register the Listeners
addInquiry.setOnClickListener(new AddInquiryEvent());

此侦听器未附加到TextView扩展类中,因为setContentView已调用并刷新布局。

可能的解决方案,如果您不单独使用该DropDownMenu活动,那么只需(删除 setContentView):

@Override 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState); //in DropDownMenu
    // setContentView(R.layout.activity_drop_down_menu);
...
...

不是最好的解决方案,但会起作用。

更新:更好的解决方案 (1)让子类决定要显示的布局。此布局必须包含菜单(在您的情况下是正确的)。

public class DropDownMenu extends Activity {

    private TextView addInquiry, addEvent, additionalInfo, addToContacts;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        _setContentView();

        //Intializing instance variables
        addInquiry = (TextView)findViewById(R.id.menu_add_inquiry);
        addEvent = (TextView)findViewById(R.id.menu_add_event);
        additionalInfo = (TextView)findViewById(R.id.menu_additional_info);
        addToContacts = (TextView)findViewById(R.id.menu_add_to_contacts);

        //Register the Listeners
        addInquiry.setOnClickListener(new AddInquiryEvent());
    }

    protected void _setContentView() {
        setContentView(R.layout.activity_drop_down_menu);
    }
    ...
    ...
}

@override_setContentView方法使我们不设置两次视图。

public class SalesInqury extends DropDownMenu {

    ...
    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        this.requestWindowFeature(Window.FEATURE_NO_TITLE);
        super.onCreate(savedInstanceState);     

        //Intializing instance variables
        addNewSalesInqury = (ImageView)findViewById(R.id.add_new_sales_inqury_btn);
        salesInquryMainLayout = (RelativeLayout)findViewById(R.id.sales_inqury_main_layout);
        testEditSales = (TextView)findViewById(R.id.testWord);
    }

    @Override
    protected void _setContentView() {
        // need to make sure this layout contains the menu (otherwise NullPointerException may arise)
        setContentView(R.layout.activity_sales_inqury); 
    }
}
于 2013-11-06T06:29:00.613 回答
0

我不确定。但是您能否尝试扩展 DropDownMenu-Activity 而不是 Activity。

 public class NewActivity extends DropDownMenu {
 // override which you want to override 
}

并确保 DropDownMenu 可以扩展您想要实现的内容。希望你明白我的意思。

于 2013-11-06T06:35:15.743 回答