所有活动中的Android相同按钮和列表视图

时间:2014-06-02 05:51:04

标签: android android-listview android-button

我想问一个关于优化代码的问题。我正在研究一个项目,我有代码工作onItemClick listner和按钮点击处理程序问题是我有9个不同的活动,我必须在我的所有活动中复制和粘贴相同的代码我遇到的问题太多了相同的代码副本粘贴到每个活动enter image description here

滑动菜单的突出显示部分在所有活动中都是相同的,我所要做的就是一次又一次地注册他们的点击列表,使它们工作并在所有活动中复制相同的代码。我希望它是通用的,即在一个地方编写的代码应该适用于所有活动。 这个应用程序处于最终启动模式,我无法使用导航抽屉切换到滑动菜单,这是我使用此方法的主要原因,顶部菜单也有不同的按钮,需要动态管理点击。我尝试使这个静态,但它没有奏效。 感谢你的时间和回复。

4 个答案:

答案 0 :(得分:3)

这听起来像片段的完美用法。将视图和相关代码放在一个片段中,并在每个活动中包含该片段。

答案 1 :(得分:2)

加布提到的将是完美的出路。但是,如果您确实想继续进行多项活动,可以创建一个扩展Activity的类,其中包含滑动菜单的所有代码。然后确保所有其他活动扩展您创建的新类。

答案 2 :(得分:1)

访问Android Sliding Menu using Navigation Drawer教程以使用导航抽屉...

这可能对你有帮助..

答案 3 :(得分:0)

这是此问题的解决方案

public class SuperActivity extends Activity implements OnClickListener,
    OnItemClickListener {

protected static Button btn_logout;
protected static ListView lv_SlidingMenu;
protected static FlyOutContainer rootView;
protected static TextView tv_userName;
protected static TextView tv_memberSince;
protected static ImageView iv_userImage;
protected static ImageView iv_top_home;
protected static TextView tv_top_home;
protected ImageView iv_slidingmenu;
protected static SlidingMenuAdapter slidingMenuAdapter = null;

@Override
protected void onCreate(Bundle savedInstanceState) {
    // TODO Auto-generated method stub
    super.onCreate(savedInstanceState);

}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
    // TODO Auto-generated method stub
    switch(parent.getId()){

    case R.id.list:

        switch(position){
        case 0:
            GeneralDataModel.actionIntent = new Intent(this,
                    ActivityTheGreatControversy.class);
            this.startActivity(GeneralDataModel.actionIntent);
            break;

        case 1:
            break;

        case 2:

            GeneralDataModel.actionIntent = new Intent(this,
                    AtlastActivity.class);
            this.startActivity(GeneralDataModel.actionIntent);
            break;

        case 3:

            GeneralDataModel.actionIntent = new Intent(this,
                    MediaActivity.class);
            this.startActivity(GeneralDataModel.actionIntent);

            break;

        case 4:

            GeneralDataModel.actionIntent = new Intent(this,
                    TimeLineActivity.class);
            this.startActivity(GeneralDataModel.actionIntent);

            break;

        case 6:

            GeneralDataModel.actionIntent = new Intent(getApplicationContext(),
                    ActivityNotes.class);
            this.startActivity(GeneralDataModel.actionIntent);
            GeneralDataModel.actionIntent = null;
            break;

        case 10:
            GeneralDataModel.actionIntent = new Intent(this,
                    ActivitySettings.class);
            this.startActivity(GeneralDataModel.actionIntent);
            rootView.toggleMenu();
            break;

        default:
            rootView.toggleMenu();
            break;

        }


        break;
    }

}

@Override
public void onClick(View v) {
    // TODO Auto-generated method stub
    Toast.makeText(getApplicationContext(), "CLICKEDiy", Toast.LENGTH_LONG)
            .show();
    switch (v.getId()) {

    case R.id.btn_sliding_logout:
        GeneralDataModel.actionIntent = new Intent(getApplicationContext(),
                LoginSignup.class);
        GeneralDataModel.actionIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(GeneralDataModel.actionIntent);
        GeneralDataModel.actionIntent = null;
        new SessionManager(this).logoutUser();
        this.finish();
        break;


    case R.id.iv_home_slidingmenu:
        rootView.toggleMenu();
        break;

    }

}

protected void fillSlidingMenu() {

    tv_userName.setText(UserInformation.getFirstName() + " "
            + UserInformation.getLastName());
    tv_memberSince.setText(UserInformation.getMemberSince());

    lv_SlidingMenu.setAdapter(slidingMenuAdapter);
}
}

并从This Class

派生您的所有活动

然后在他们的onClickListners中只需调用super.onclick(v);