【问题标题】:Calling the Methods of another activity调用另一个活动的方法
【发布时间】:2013-11-05 12:16:52
【问题描述】:

这是我的情况。我需要在activity 1 中调用activity 2 中的方法。请看我activity 1的代码

<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" />

<ImageView
    android:id="@+id/add_new_sales_inqury_btn"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/textView1"
    android:layout_alignParentRight="true"
    android:layout_toRightOf="@+id/textView1"
    android:src="@drawable/add_2" />

<EditText
    android:id="@+id/search_2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentRight="true"
    android:layout_below="@+id/textView1"
    android:layout_marginTop="10dp"
    android:ems="8"
    android:singleLine="true"
    android:hint="Search" >
</EditText>

<ImageView
    android:id="@+id/alphabet_order"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView1"
    android:layout_alignTop="@+id/search_2"
    android:layout_alignParentLeft="true"
    android:src="@drawable/open_alphabet" /> 


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

你能看到有一个include 吗?这是我添加activity 2 GUI 的地方。 activity 2 是一种菜单,可以上下滑动。以下是activity 2

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_centerHorizontal="true"
    android:layout_centerVertical="true"
    android:text="Drag the control at the bottom"
    android:textSize="20dp"
    tools:context=".SlidingDrawerActivity" />

<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"
    android:padding="10dip" >

    <Button
        android:id="@+id/slideButton"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="^" >
    </Button>

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

        <Button
            android:id="@+id/Button01"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="2dp"
            android:text="Button 1" >
        </Button>

        <Button
            android:id="@+id/Button02"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="2dp"
            android:text="Button 2" >
        </Button>

        <Button
            android:id="@+id/Button03"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:layout_margin="2dp"
            android:text="Button 3" >
        </Button>
    </LinearLayout>
</SlidingDrawer>

以下是本次活动的Java代码

public class DropDownMenu extends Activity {

    private LinearLayout menuHolder;
    private ImageView menuOpener;

    private Button testButton;

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

        testButton = (Button)findViewById(R.id.Button02);
        testButton.setOnClickListener(new TestButtonAction());




    }

    @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 TestButtonAction implements OnClickListener
    {

        @Override
        public void onClick(View arg0) 
        {
            // TODO Auto-generated method stub
            Toast.makeText(DropDownMenu.this, "WORKING!!!", Toast.LENGTH_LONG).show();
            Intent intent = new Intent(DropDownMenu.this,Home.class);
            startActivity(intent);

        }

    }

}

不幸的是,这不起作用。我想那是因为我没有在activity 1 中使用startActivity(Intent) 开始这个活动。

我无法在每个活动中编码activity 2,因为如果我这样做,那么我必须至少编写 30 次。因此,在其他活动中应该只有 1 个“菜单代码”可访问。

我该怎么做?

【问题讨论】:

标签: java android eclipse android-activity slidingdrawer


【解决方案1】:

第一步:创建一个基类

第 2 步:将方法保留在基类中

第 3 步:在第一个活动中创建实例并在您的第一个活动中访问方法

第 4 步:将相同的基类实例传递给第二个活动

第 5 步:访问相同的实例,因此在第二个活动中使用相同的方法

【讨论】:

  • 我也想过这个。这会在android中工作吗?因为我用过 ?我确信这适用于其他语言,但在这里, 似乎是来自 anotehr 位置的容器,这就是为什么
  • 如果你照顾它就会工作,不要在基类中保留任何依赖于活动的条目,只需将其用作 bean 来传递活动的状态
【解决方案2】:

或者您可以拥有一个包含该方法的简单 java 类。在实例化此类时,您可以将方法所需的所有参数传递给构造函数,如 Context 和所有.. 然后从任何你喜欢的活动..

public class Example {

    Context context;

    public Example(Context context) {
        this.context = context;
    }

    public void methodToBeCalled30Times() {
         //do necessary things here using context
    }
}

【讨论】:

    猜你喜欢
    • 2011-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    相关资源
    最近更新 更多