2016-11-01 2 views
1

У меня есть TabActivity с некоторыми вкладками для ввода пользователем. Когда пользователь выполнит ввод и нажимает кнопку сохранения, я перехожу к сохранению данных. Это делается путем вызова метода startDataTravershal() в каждом действии. Я хочу показать progressDialog, когда кнопка нажата, и отпустите ее, когда будет выполнено сохранение данных. однако независимо от того, что я делаю, прогрессDialog не отображается.ProgressDialog не отображается в TabActivity

мой код:

public class HandHoldingTabUI extends TabActivity { 

    TabHost TabHostWindow; 
    TabSpec TabEntry; 
    TabSpec TabRectification; 
    TabSpec TabG26; 
    TabSpec TabU26; 
    TabSpec TabG27; 
    TabSpec TabBudget; 
    TabSpec TabBDC; 
    TabSpec TabTradeL; 
    TabSpec TabIncomeC; 
    TabSpec TabPCC; 
    TabSpec TabTAR; 
    TabSpec TabPNTA; 
    TabSpec TabPaperless; 
    TabSpec TabOthers; 

    Button btnSaveData = null; 

    ProgressDialog progressDialog = null; 

    public static HandHoldingTabUI context; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.handholding_tab_ui); 
     context=this; 
     UserDataHelper helper = new UserDataHelper(HandHoldingTabUI.this); 
     helper.deleteData("delete from "+UserDataHelper.tableMentorSurveyData); 
     helper.close(); 
     init(); 
    } 

    private void init() { 
     btnSaveData = (Button) findViewById(R.id.btnSaveData); 
     btnSaveData.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       progressDialog = ProgressDialog.show(HandHoldingTabUI.this, "", 
         "Loading. Please wait..."); 
       HandHoldingTabUI.this.runOnUiThread(new Runnable() { 

        @Override 
        public void run() { 
         saveData(); 
         progressDialog.dismiss(); 
        } 
       }); 

      } 
     }); 
     TabHostWindow = (TabHost)findViewById(android.R.id.tabhost); 

     createTab(TabEntry,"Entry","Entry", Entry.class); //Entry 
     createTab(TabRectification,"Rectification","Rectification", Rectification.class); // Rectification 
     createTab(TabG26,"Generation of form 26","Generation of form 26", G26.class); //Generation of form 26 
     createTab(TabU26,"Uploading of form 26","Uploading of form 26", U26.class); //Uploading of form 26 
     createTab(TabG27,"Generation of form 27","Generation of form 27", G27.class); //Generation of form 27 
     createTab(TabBudget,"Budget (Form 36)","Budget (Form 36)", Budget.class); //Budget (Form 36) 
     createTab(TabBDC,"Birth and Death Certificate","Birth and Death Certificate", BDC.class); //Birth and Death Certificate 
     createTab(TabTradeL,"Trade license","Trade license", TradeL.class); //Trade license 
     createTab(TabIncomeC,"Income Certificate","Income Certificate", IncomeC.class); //Income Certificate 
     createTab(TabPCC,"Provisional Caste Certificate","Provisional Caste Certificate", PCC.class); //Provisional Caste Certificate 
     createTab(TabTAR,"Tax Assessment Register","Tax Assessment Register", TAR.class); //Tax Assessment Register 
     createTab(TabPNTA,"Preparation of Non-tax Assessment","Preparation of Non-tax Assessment", PNTA.class); //Preparation of Non-tax Assessment 
     createTab(TabPaperless,"Paperless","Paperless", PaperLess.class); //Paperless 
     createTab(TabOthers,"Others","Others", Others.class); //Others 

     setUpCommonData(); 

    } 

    private void setUpCommonData() { 
     SharedPreferences prefs = getSharedPreferences("Preferences", Context.MODE_PRIVATE); 
     HandholdingCommonData.gpCode = getIntent().getStringExtra("gpCode"); 
     HandholdingCommonData.userId = prefs.getString("userCode",null); 
     HandholdingCommonData.userGroup = prefs.getString("userGroup",null); 
     HandholdingCommonData.userChekInTime = prefs.getString("checkInTime",null); 
     HandholdingCommonData.userFileId = HandholdingCommonData.userId + "_"+HandholdingCommonData.userChekInTime; 
    } 

    private void createTab(TabSpec TabMenu,String TabName,String TabIndicator,Class TabActivity){ 

     TabMenu = TabHostWindow.newTabSpec(TabName); 
     TabMenu.setIndicator(TabIndicator); 
     TabMenu.setContent(new Intent(this,TabActivity)); 
     TabHostWindow.addTab(TabMenu); 
    } 

    private void saveData() { 

     UserDataHelper helper = new UserDataHelper(HandHoldingTabUI.this); 
     helper.deleteData("delete from "+UserDataHelper.tableMentorSurveyData); 
     helper.close(); 

     for(int i = 0; i<getTabHost().getTabWidget().getTabCount(); i++) { 
      getTabHost().setCurrentTab(i); 
      Activity myActivity = this.getCurrentActivity(); 
      if(myActivity instanceof Entry) { 
       Entry obj = (Entry) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof BDC) { 
       BDC obj = (BDC) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof Budget) { 
       Budget obj = (Budget) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof G26) { 
       G26 obj = (G26) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof G27) { 
       G27 obj = (G27) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof IncomeC) { 
       IncomeC obj = (IncomeC) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof Others) { 
       Others obj = (Others) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof PaperLess) { 
       PaperLess obj = (PaperLess) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof PCC) { 
       PCC obj = (PCC) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof PNTA) { 
       PNTA obj = (PNTA) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof Rectification) { 
       Rectification obj = (Rectification) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof TAR) { 
       TAR obj = (TAR) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof TradeL) { 
       TradeL obj = (TradeL) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
      if(myActivity instanceof U26) { 
       U26 obj = (U26) myActivity; 
       obj.category = "Handholding Support"; 
       obj.startDataTravershal(); 
      } 
     } 
     proceedToShowDraft(); 
    } 

    private void proceedToShowDraft() { 
     Intent intent = new Intent(); 
     intent.setClass(HandHoldingTabUI.this,DraftUi.class); 
     intent.putExtra("gpCode",HandholdingCommonData.gpCode); 
     intent.putExtra("userGroup",HandholdingCommonData.userGroup); 
     intent.putExtra("userId",HandholdingCommonData.userId); 
     intent.putExtra("userFileId",HandholdingCommonData.userFileId); 
     startActivity(intent); 
     HandHoldingTabUI.this.finish(); 
    } 
} 

Я пробовал эти решения, но они не помогают:

Progress Dialog in Tab Layout in android

Show a progress dialog in android tab layout

android how to put progressdialog in TabActivity

я был бы весьма признателен любая помощь в этом вопросе.

спасибо, с наилучшими пожеланиями.

EDIT: в соответствии с замечанием я попытался сделать это: -

AsyncTask task = new AsyncTask() { 
       @Override 
       protected Object doInBackground(Object[] params) { 
        progressDialog = ProgressDialog.show(HandHoldingTabUI.this, "", 
          "Loading. Please wait..."); 
        saveData(); 
        return null; 
       } 

       @Override 
       protected void onPostExecute(Object o) { 
        progressDialog.dismiss(); 
        proceedToShowDraft(); 
       } 
      }; 

это написано на OnClick() кнопки. но теперь, когда я нажимаю кнопку, ничего не происходит.

+0

Чтобы показать прогресс, который вам нужно запустить в фоновом потоке, например asynctask –

+0

, можете ли вы указать любой код/​​подсказки о том, как это сделать? я смотрел в asynctask, но не мог понять, как использовать это в этом контексте –

+0

, почему вам нужно progressdialog в создании вкладок –

ответ

0

Пожалуйста, попробуйте изменить метод onClick() так:

@Override 
public void onClick(View v) { 
    progressDialog = ProgressDialog.show(HandHoldingTabUI.this, "", 
      "Loading. Please wait..."); 
    new Thread(new Runnable() { 

     @Override 
     public void run() { 
      saveData_1(); 
      HandHoldingTabUI.this.runOnUiThread(new Runnable() { 

       @Override 
       public void run() { 
        saveData_2(); 
        progressDialog.dismiss(); 
       } 
      }); 
     } 
    }).start(); 
} 

... 

private void saveData_1() { 
    UserDataHelper helper = new UserDataHelper(HandHoldingTabUI.this); 
    helper.deleteData("delete from "+UserDataHelper.tableMentorSurveyData); 
    helper.close(); 
} 

private void saveData_2() { 
    for(int i = 0; i<getTabHost().getTabWidget().getTabCount(); i++) { 
     getTabHost().setCurrentTab(i); 
     Activity myActivity = this.getCurrentActivity(); 
     if(myActivity instanceof Entry) { 
      Entry obj = (Entry) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof BDC) { 
      BDC obj = (BDC) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof Budget) { 
      Budget obj = (Budget) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof G26) { 
      G26 obj = (G26) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof G27) { 
      G27 obj = (G27) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof IncomeC) { 
      IncomeC obj = (IncomeC) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof Others) { 
      Others obj = (Others) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof PaperLess) { 
      PaperLess obj = (PaperLess) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof PCC) { 
      PCC obj = (PCC) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof PNTA) { 
      PNTA obj = (PNTA) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof Rectification) { 
      Rectification obj = (Rectification) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof TAR) { 
      TAR obj = (TAR) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof TradeL) { 
      TradeL obj = (TradeL) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
     if(myActivity instanceof U26) { 
      U26 obj = (U26) myActivity; 
      obj.category = "Handholding Support"; 
      obj.startDataTravershal(); 
     } 
    } 
    proceedToShowDraft(); 
} 

Пожалуйста, обратите внимание, что вы должны принять во внимание то, что должно произойти, когда деятельность закончена в то время как фоновый поток выполнения.

+0

это вызывает одно и то же исключение «Только исходный поток, создавший иерархию представлений, может коснуться его представлений» –

+0

Ах, извините, просто увидел, что saveData() делает много связанных с ui вещей. Возможно, вы могли бы перемещать все, кроме UserDataHelper helper = new UserDataHelper (HandHoldingTabUI.this), и helper.deleteData («удалить из» + UserDat aHelper.tableMentorSurveyData); helper.close(); во второй Runnable моего сообщения, так что он работает на поток ui? – Thomas

+0

попытался переместить saveData() внутри runOnUiThread.run(), но не повезло. Progressdialog показывается всего лишь секунду, когда активность, наконец, готова к переходу на управление –