2013-10-21 97 views
1

我在我的应用程序中有两项活动:菜单活动和主要活动。 这里是MenuActivity XMLAndroid中的继承

<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=".MenuActivity" > 

<LinearLayout 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
android:padding="10dp" 
android:gravity="center" 
android:background="#000" 
> 

<TextView 
android:text="menu 1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/menu1" 
android:textColor="#fff" 
android:padding="5dp" 
/> 

<TextView 
android:text="menu 2" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:id="@+id/menu2" 
android:textColor="#fff" 
android:padding="5dp" 
/> 

</LinearLayout> 

</RelativeLayout> 

这是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" > 

<include 
layout="@layout/activity_menu" 
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
/> 

</RelativeLayout> 

现在点击菜单1的监听器和MENU2在MenuActivity.java定义。

public class MenuActivity extends Activity { 

TextView menu1, menu2; 

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

menu1 = (TextView)findViewById(R.id.menu1); 
menu2 = (TextView)findViewById(R.id.menu2); 


menu1.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View arg0) { 
// TODO Auto-generated method stub 
Toast.makeText(getApplicationContext(), "menu 1 clicked", 5000).show(); 
} 
}); 

menu2.setOnClickListener(new OnClickListener() { 

@Override 
public void onClick(View arg0) { 
// TODO Auto-generated method stub 
Toast.makeText(getApplicationContext(), "menu 2 clicked", 5000).show(); 
} 
}); 

} 

如何继承MainActivity中的点击式监听器。简而言之,我在MenuActivity中的代码必须用于其他各种活动,我该如何使用它?请支持一段代码,我已经做了大量的搜索,但无济于事。我是Android的新手,任何帮助将不胜感激。

回答

4

您在哪里使用这些菜单按钮,你在每一个活动使用的基类:

public class BaseActivity extends Activity implements OnClickListener { 

    @Override 
    protected void onClick(View view) { 
     switch(view.getId()) { 
     case R.id.menu1: 
      Toast.makeText(this, "Menu1 clicked.", Toast.LENGTH_SHORT).show(); 
     break; 

     case R.id.menu2: 
      Toast.makeText(this, "Menu2 clicked.", Toast.LENGTH_SHORT).show(); 
     break; 
     } 
    } 
} 

然后做在您的活动:

public class MainActivity extends BaseActivity { 

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

     findViewById(R.id.menu1).setOnClickListener(this); 
     findViewById(R.id.menu2).setOnClickListener(this); 
    } 
} 

而在其他活动,你可以做相同:

public class SecondActivity extends BaseActivity { 

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

     findViewById(R.id.menu1).setOnClickListener(this); 
     findViewById(R.id.menu2).setOnClickListener(this); 
    } 
} 

只要记住要包括该菜单布局在你的活动布局,所以你没有得到空指针。

0

你不会继承你实现它的OnClickListener!
每个活动都实现它自己的onClick(),这为您的代码提供了更大的灵活性。
编辑
审查你的代码能简化的东西,我相信这是你想要的东西后,你可以实现OnClickListner到你的活动和编写一个的onClick方法为您的活动都clickables在这里,你可以做到这一点

public class MenuActivity extends Activity implements OnClickListener 
{ 
    TextView menu1, menu2; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_menu); 
     menu1 = (TextView)findViewById(R.id.menu1); 
     menu2 = (TextView)findViewById(R.id.menu2); 
     menu1.setOnClickListener(this); 
     menu2.setOnClickListener(this); 
    } 
    @override 
    onClick(View view) 
    { 
     if (view == menu1) 
      Toast.makeText(getApplicationContext(), "menu 1 clicked", Toast.LONG).show(); 
     if (view == menu2) 
      Toast.makeText(getApplicationContext(), "menu 2 clicked", Toast.LONG).show(); 
    } 
} 

而且最好不要引用textviews如果你不会使用它们

public class MenuActivity extends Activity implements OnClickListener 
{ 
    @Override 
    protected void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_menu); 
     findViewById(R.id.menu1).setOnClickListener(this); 
     findViewById(R.id.menu2).setOnClickListener(this); 

    } 
    @override 
    onClick(View view) 
    { 
     if (view.getId() == R.id.menu1) 
      Toast.makeText(getApplicationContext(), "menu 1 clicked", Toast.LONG).show(); 
     if (view.getId() == R.id.menu2) 
      Toast.makeText(getApplicationContext(), "menu 2 clicked", Toast.LONG).show(); 
    } 
} 
+0

所以如果我必须在所有活动中包含一个菜单栏(比如说家,关于我们等),是否需要在所有活动中编写onclicklistener的代码? –

+0

是的,但你可以只写一个onClick每个活动我;附加了一些代码 –

+0

你可以简单地创建一个类,它实现了OnClickListener接口并将它的所有活动传递给你想要的视图 – kjurkovic

0

不能继承菜单活动的点击听众主要活动。每个活动都有其自己的点击监听器。虽然可以使一般方法执行一些任务,并从两个活动中调用该方法,但不能像这样继承它。