Как создать функцию глобального уровня с возможностью пользовательского интерфейса - PullRequest
0 голосов
/ 26 сентября 2011

У меня есть функция, чтобы найти номер идентификатора сотрудника из моей базы данных sqlite.Функция позволяет пользователю искать по идентификатору или имени (первое и / или последнее);поэтому он создает несколько диалоговых окон и находит данные через дерево If Else Then.Вот код для тех, кто любит подобные вещи:

public String getEmployeeID() {
  final CharSequence[] items = {"By ID", "By Name", "Cancel"};
  AlertDialog.Builder builder = new AlertDialog.Builder(LibraryScreen.this);
  builder.setTitle("Find Employee");
  builder.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
    public void onClick(DialogInterface dialog, int item) {
      if(items[item].equals("Cancel")) {
        dialog.cancel();
        empid = "";
      } else if(items[item].equals("By ID")) {
        dialog.cancel();
        final Dialog dialog2 = new Dialog(LibraryScreen.this);
        dialog2.setContentView(R.layout.peopledialog);
        dialog2.setTitle("Employee ID");
        dialog2.setCancelable(true);
        //Set Visibility of the Rows
        TableRow tblrow1 = (TableRow) dialog2.findViewById(R.id.trGeneral);
        tblrow1.setVisibility(0);
        //Set Captions for Rows
        TextView txtvw1 = (TextView)  dialog2.findViewById(R.id.tvGeneral);
        txtvw1.setText("Employee ID");
        //Set Up Edit Text Boxes
        EditText edttxt1 = (EditText) dialog2.findViewById(R.id.txtGeneral);
        //Set Input Type
        edttxt1.setRawInputType(0x00000002);//numbers
        edttxt1.setText("");
        //set max lines
        edttxt1.setMaxLines(1);
        //Set MaxLength
        int maxLength;
        maxLength = 15;
        InputFilter[] FilterArray = new InputFilter[1];
        FilterArray[0] = new InputFilter.LengthFilter(maxLength);
        edttxt1.setFilters(FilterArray);
        Button button = (Button) dialog2.findViewById(R.id.btnTxtDiaSav);
        button.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
            EditText emplid = (EditText) dialog2.findViewById(R.id.txtGeneral);
            String newemp = "";
            db.open();
            Cursor c = db.getEmployee(emplid.getText().toString());
            if(c.moveToFirst()) {
              empid = c.getString(c.getColumnIndex("employeeid"));
            } else {
              Toast.makeText(LibraryScreen.this, "No ID Match", Toast.LENGTH_LONG).show();
              empid = "";
            }
            c.close();
            db.close();
            dialog2.dismiss();
          }
        });
        Button buttonCan = (Button) dialog2.findViewById(R.id.btnTxtDiaCan);
        buttonCan.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
            dialog2.dismiss();
            empid = "";
          }
        });
        dialog2.show();

      } else if(items[item].equals("By Name")) {
        dialog.cancel();
        final Dialog dialog1 = new Dialog(LibraryScreen.this);
        dialog1.setContentView(R.layout.peopledialog);
        dialog1.setTitle("Employee's Name");
        dialog1.setCancelable(true);
        //Set Visibility of the Rows
        TableRow tblrow1 = (TableRow) dialog1.findViewById(R.id.trGeneral);
        tblrow1.setVisibility(0);
        //Set Captions for Rows
        TextView txtvw1 = (TextView)  dialog1.findViewById(R.id.tvGeneral);
        txtvw1.setText("Employee Name");
        //Set Up Edit Text Boxes
        EditText edttxt1 = (EditText) dialog1.findViewById(R.id.txtGeneral);
        //Set Input Type
        edttxt1.setRawInputType(0x00002001);//cap words
        edttxt1.setText("");
        //set max lines
        edttxt1.setMaxLines(1);
        //Set MaxLength
        int maxLength;
        maxLength = 50;
        InputFilter[] FilterArray = new InputFilter[1];
        FilterArray[0] = new InputFilter.LengthFilter(maxLength);
        edttxt1.setFilters(FilterArray);

        Button button = (Button) dialog1.findViewById(R.id.btnTxtDiaSav);
        button.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
            EditText emplid = (EditText) dialog1.findViewById(R.id.txtGeneral);
            String firstname = emplid.getText().toString();
            String lastname = "";
            String matchlist = "";
            String temptext = "";
            int matchcount = 0;
            if(firstname.lastIndexOf(" ") <= 0) {
              lastname = firstname;
              firstname = "X";
            } else {
              lastname = firstname.substring(firstname.lastIndexOf(" ") + 1);
              firstname = firstname.substring(0, firstname.lastIndexOf(" "));
            }
            db.open();
            Cursor c1, c2;
            String titletext = "";
            if(firstname.length() > 0) {
              c1 = db.getEmployeeByName(lastname, firstname);
              if(c1.getCount() == 0) {
                c1 = db.getRowByFieldTextOrdered("employees", "lastname", lastname, "lastname, firstname");
                if(c1.getCount() == 0) {
                  Toast.makeText(LibraryScreen.this, "No matching Employees.", Toast.LENGTH_LONG).show();
                  empid = "";
                }
              }
              if(c1.getCount() > 0) {
                do {
                  c2 = db.getRowByField("orgcodes", "manager", c1.getString(c1.getColumnIndex("employeeid")));
                  if(c2.moveToFirst()) {
                    if(c2.getString(c2.getColumnIndex("orgcode")).substring(9, 10).equals("0")) {
                      if(c2.getString(c2.getColumnIndex("orgcode")).substring(7, 8).equals("0")) {
                        if(c2.getString(c2.getColumnIndex("orgcode")).substring(5, 6).equals("0")) {
                          if(c2.getString(c2.getColumnIndex("orgcode")).substring(4, 5).equals("0")) {
                            if(c2.getString(c2.getColumnIndex("orgcode")).substring(3, 4).equals("0")) {
                              titletext = "Top Brass";
                            } else {
                              titletext = "Senior VP";
                            }
                          } else {
                            titletext = "VP";
                          }
                        } else {
                          titletext = "Director";
                        }
                      } else {
                        titletext = "Senior Manager";
                      }
                    } else {
                      titletext = "Manager";
                    }
                  } else {
                    titletext = "Employee";
                  }
                  matchcount++;
                  matchlist = matchlist + c1.getString(c1.getColumnIndex("employeeid")) + ": " + c1.getString(c1.getColumnIndex("firstname")) + " " + c1.getString(c1.getColumnIndex("lastname")) + ": " + titletext + "|";
                } while(c1.moveToNext());
              }
            } else {
              empid = "";
            }
            if(matchcount == 0) {
              db.close();
              Toast.makeText(LibraryScreen.this, "No matching Employees.", Toast.LENGTH_LONG).show();
              empid = "";
            } else {
              final CharSequence[] items = new CharSequence[matchcount + 1];
              items[0] = "(Cancel)";
              for(int i = 1; i <= matchcount; i++) {
                items[i] = matchlist.substring(0, matchlist.indexOf("|"));
                matchlist = matchlist.substring(matchlist.indexOf("|") + 1);
              }
              db.close();
              AlertDialog.Builder builder1 = new AlertDialog.Builder(LibraryScreen.this);
              builder1.setTitle("Select Employee");
              builder1.setSingleChoiceItems(items, -1, new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int item) {
                  if(items[item].equals("(Cancel)")) {
                    dialog.cancel();
                    empid = "";
                  } else {
                    String wasted = items[item].toString();
                    empid = wasted.substring(0, wasted.indexOf(":"));
                    dialog.cancel();
                  }
                }
              });
              AlertDialog alert1 = builder1.create();
              alert1.show();
            }
            dialog1.dismiss();
          }
        });
        Button buttonCan = (Button) dialog1.findViewById(R.id.btnTxtDiaCan);
        buttonCan.setOnClickListener(new OnClickListener() {
          @Override
          public void onClick(View v) {
            dialog1.dismiss();
            empid = "";
          }
        });
        dialog1.show();
      }
    }
  });
  AlertDialog alert = builder.create();
  alert.show();
  return empid;
}

Я использую идентификатор сотрудника для различных функций в рамках нескольких действий в моей программе.До сих пор я просто вставлял код под каждым слушателем, которому нужен идентификатор, но это пустая трата ИМХО.

Мой вопрос:

Есть ли способ поставитьэта функция где-то, что может быть вызвано из множества различных действий?

Если так:

  1. Как мне это сделать?
  2. Как мне установить контекст длядиалоговые окна для нескольких действий?
  3. Как вернуть идентификатор сотрудника для функции, которая нуждается в этом?

Я уверен, что об этом уже спрашивали, но у меня нетЯ не смог найти его в Интернете: на самом деле, я даже не уверен, как правильно сформулировать запрос.Мои попытки оказались очень короткими.

1 Ответ

1 голос
/ 03 апреля 2012

Немного опоздал на вечеринку - но записал для потомков:

Читайте о Приложении Класс:

Базовый класс для тех, кому необходимо поддерживать глобальное состояние приложения. Вы можете предоставить свою собственную реализацию, указав ее имя в вашем Тег AndroidManifest.xml, который будет вызывать этот класс быть создан для вас, когда процесс для вашего приложение / пакет создан.

По сути, это даст вам возможность получить один объект, который представляет ваше работающее приложение (представьте, что он представляет собой одноэлементный объект, который возвращает экземпляр вашего работающего приложения).

Сначала вы создаете класс, расширяющий базовый класс Application, и определяете любой общий код, который используется в вашем приложении

import android.app.Application;

public class MyApplication extends Application {

       public void myGlobalBusinessLogic() {
           //
       }   
}

Затем скажите вашему приложению использовать класс MyApplication вместо класса Application по умолчанию через узел <application> в манифесте приложения:

<application android:icon="@drawable/icon" android:label="@string/app_name"
    android:name="MyApplication">

Наконец, когда вам нужно перейти к обычной функции, просто сделайте что-то вроде:

MyApplication application =  (MyApplication) getApplication();

application.myGlobalBusinessLogic();

Если вам нужно получить контекст из какой-либо части вашего приложения, вы можете просто вернуть его, вызвав getApplicationContext() (определенный в базовом Application классе) через метод получения в вашем пользовательском классе приложения.

...