使用公共类来实现一组通用功能,通过扩展一个扩展Activity的类

时间:2013-04-26 08:39:22

标签: android

我必须在所有活动中显示自定义视图,我想在一个公共类中执行此操作。

假设我有这三个活动,即

Activity_1

Activity_2

Activity_3

和常见活动MainActivity

我想在所有3个活动中展示一个共同的xml

我还需要在一个公共位置设置点击监听器,以便我只在需要时才需要更改。

我知道这是一个非常oops相关的问题。

这就是我所做的:

活动一:

public class ActivityOne extends CommonActivity{


Button button1;

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

    button1=(Button)findViewById(R.id.button1);

    button1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent i=new Intent(ActivityOne.this,OtherActivity.class);
            startActivity(i);

        }
    });
}

}

ActivityOne XML:

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

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Activity1" />

    <include
    android:id="@+id/header_layout"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    layout="@layout/common" />

主要活动:

public class MainActivity extends Activity {

Button button1;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    button1=(Button)findViewById(R.id.button1);


    button1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Intent i=new Intent(MainActivity.this,ActivityOne.class);
            startActivity(i);

        }
    });

}

}

MainActivity XML:

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

    <Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/textView1"
    android:layout_alignRight="@+id/textView1"
    android:text="Button1" />

 </RelativeLayout>

CommonActivity

public class CommonActivity extends Activity{
private Button button1;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.common);


    button1=(Button)findViewById(R.id.button1);

    button1.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {
            Toast.makeText(CommonActivity.this, "Common Clicked", Toast.LENGTH_SHORT).show();

        }
    });

}

 }

CommonActivity Xml:

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

<Button
    android:id="@+id/button1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Common"/>

</LinearLayout>

现在,当我点击Activityone中的常用按钮时,toast没有显示。 我需要做的更多,或者我做错了什么。

2 个答案:

答案 0 :(得分:0)

您可以创建一个扩展Activity的抽象类,然后在那里实现常用功能。您还可以编写在扩展此类时需要实现的抽象方法 例如:

 public abstract class MyAbstactActivity  extends Activity{
    //for example for onCreate
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
      setContentView(R.layout.main);
        //do your common stuff here and then overwrite it when you need to custumize
    }
    public  abstract doStuff();//Must implement this when you extend MyAbstractClass


    }

   public class MyActivity extends MyAbstactActivity {
    public  abstract doStuff(){//Code}

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    //do your work as usual.
    //setContentView(R.layout.main)--> is not needed but of course you can change the layout

}


}

答案 1 :(得分:-1)

JAVA HERITAGE !!

让您的孩子扩展您在oncreate方法中设置布局的MainActivity。

或者使用寻呼机然后滑动。