【问题标题】:Using common function in multiple activity android在多个活动android中使用通用功能
【发布时间】:2017-09-18 08:10:11
【问题描述】:

我想在multiple activity 中使用common function。我怎样才能做到这一点?

在我的应用程序中,我显示了一个 Dialog box,其中包含一些来自某些 api 的数据。而这个对话框,在多个活动中使用。 Right now I have implemented same Dialog box in all activities。现在我想要所有活动的通用对话框。 I am using this Dialog box in activity as well in adapter.

我怎么能这样做?使用extends 或使用fragment。 我已经在扩展一些类,所以我不能再扩展(正如我所读到的,我们不能扩展一个以上的类。)。

我还想向这个函数传递一些值,并基于return 值我想调用另一个函数。

private boolean allGroupsEdit(final String type) {
    String allGroups = "allGroups";
    final String url = Constants.CONSTANT_SERVER_URL + Constants.CONSTANT_GET_GROUPS_URL;
    final ProgressDialog dialog = new ProgressDialog(context);
  dialog.setMessage(context.getResources().getString(R.string.please_wait));
    dialog.show();

    StringRequest allGroupsRequest = new StringRequest(Request.Method.POST, url, new Response.Listener<String>() {
        @Override
        public void onResponse(String s) {
            final SharedPreferences sharedPreferencesRemember = PreferenceManager.getDefaultSharedPreferences(context);
            sessionGroupId = sharedPreferencesRemember.getString(Constants.CONSTANT_session_group_id, "");

            try {
                JSONObject jsonObject = new JSONObject(s);
                JSONArray jsonArray = jsonObject.optJSONArray(Constants.CONSTANT_data);
                int a = jsonArray.length();
                for (int i = 0; i < jsonArray.length(); i++) {

                    JSONObject schObj = jsonArray.optJSONObject(i);
                    schData = schObj.optJSONArray(Constants.CONSTANT_data);
                }
            dialog.dismiss();
                final Dialog dialog = new Dialog(context);
                dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
                dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
                dialog.setContentView(R.layout.dialog_checkbox_options);
                Window window = dialog.getWindow();
                window.setLayout(DrawerLayout.LayoutParams.MATCH_PARENT, DrawerLayout.LayoutParams.WRAP_CONTENT);

               if(..someting){
                 editPublicComments(type);
               }else{
                 editPublicPosts(type);
               }
              }catch(){}
       }
  }

注意:这是一个很长的函数,所以我粘贴一些代码以供基本理解。如果您需要更多详细信息,请告诉我。提前致谢,欢迎编辑和提出建议。

Edit_1:我希望整个功能通用。 Edit_2:如何从 utils 向活动返回值?

Edit_3:现在我在一个类中创建了一个静态函数,我可以从我的活动中调用它。现在我想根据常用函数结果调用另一个函数。 (我使用SharedPreferences来存储常用函数的值)。

但是在我调用通用函数的活动中,我不会先执行通用函数。调用另一个函数,然后调用普通函数,完成普通方法后,不再调用其他方法。

我只想根据常用函数的结果调用另一个函数,即true or false

 boolean abab = CommonGroupBox.allGroupsEdit(context,"share", selectedPostId, localGrpArray);
 if (abab){
   boolean pubFlag = pref.getBoolean("isPublicFlag", false);
   String qType = pref.getString("questionType","0");
   if (pubFlag) {
      editPublicComments(qType);
   }else{
      ediComments(qType);
   }
 else{
   boolean pubFlag = pref.getBoolean("isPublicFlag", false);
   String qType = pref.getString("questionType","0");
   if (pubFlag) {
     PublicComments(qType);
   }else{
     Comments(qType);
   }
  }

这里不是第一次调用CommonGroupBox.allGroupsEdit。它在 if 和 else 循环之后调用。

【问题讨论】:

  • 创建一个Utility 类并将所有常用方法放入整个应用程序中并使用。
  • 感谢您的回复@Rustam。我是安卓新手。如何创建实用程序类以及如何调用它以及将变量传递给它。

标签: android dialog fragment extends


【解决方案1】:

创建一个普通的java类

 public class Utility {

    //your common method
    public static void showDialog(Context context,int type){

       //TODO task
    }
}

现在您可以在应用程序的任何位置使用showDialog 方法

Utility.showDialog(ctx,type);

【讨论】:

  • 我可以从中调用另一个函数吗?或者我可以从中获取数据吗?
  • 是的,你可以。如果您想从您的方法中返回一些数据,请相应地提及方法的return type
  • 您可以创建多个模型并在实用程序类@Rustam 中创建一个实例,以便在您的应用程序中传递数据。
  • 嘿谢谢您的回复。我想根据常用函数结果调用另一个函数。但是现在我正在调用公共函数,但是在公共函数的返回值之前调用了另一个函数。我正在使用 if 和 else 并在值返回 @Orvenito 之前调用它
  • 抱歉,您能否为您的问题添加一个编辑,并包括您想要添加到您的通用类中以便更好地理解的内容。
【解决方案2】:

您可以创建一个扩展 AppCompatActivity 的抽象类,在那里实现您的方法并使您的所有其他活动都扩展该类:

public abstract class BaseActivity extends AppCompatActivity {

    protected boolean allGroupsEdit(final String type) {
        // ...
    }

    // Other methods
}

然后将您的活动实现为:

public class MainActivity extends BaseActivity {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        allGroupsEdit("Some type");
    }
...

【讨论】:

  • 正如我所说,我已经在扩展一些电话。所以从技术上讲,我不能扩展另一个类(正如我所读的)。
【解决方案3】:

创建实用程序类:

1) 创建一个扩展 Activity 的名为 AppUtil 的 Java 文件。

2) 选择您将在应用程序中使用的常用方法。

3) 在 AppUtil java 文件中编写函数

4) 将 Java 文件中的所有函数设为静态,以便在 Activity 中轻松调用(例如:AppUtil.yourMethod())

5) 传递 Activity 的上下文。

这是一个检查互联网连接的简单示例:

public class AppUtilities extends Activity {

public static boolean isInternetConnected(Context context) {
    ConnectivityManager cm = (ConnectivityManager) 
    context.getSystemService(Context.CONNECTIVITY_SERVICE);
    NetworkInfo netInfo = cm.getActiveNetworkInfo();
    return netInfo != null && netInfo.isConnectedOrConnecting() && 
    netInfo.isAvailable();
  }
}

您可以在应用程序的任何位置轻松调用此方法 示例 ::

AppUtilities.isInternetConnected(YourActivity.this);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-02
    • 1970-01-01
    • 2014-09-26
    • 1970-01-01
    • 2014-11-09
    • 2016-11-25
    • 2014-06-25
    • 2015-11-20
    相关资源
    最近更新 更多