2017-01-24 29 views
1

我想集中到editText結束的時候我回來從其他活動的活動設置數據後的onCreate()空。 我通過viewNameIntent過濾要查看值得重點關注。 我使用ViewModel - Data Binding模型類將數據設置爲viewsEditText.getText()。的toString()是視圖模型

問題 我可以從意圖和觀點也集中獲取值,但我不能讓文字的大小設置光標到結束在editText文本。雖然值設置爲每個意見,我可以看到和做其他的東西與價值。唯一的問題是getText().toString()在開始最後將焦點設置。

bindingName.viewName.getText().toString()總是空從而光標停留在開頭。

此問題,如果我打電話在OnCreate()或的onResume()狀態下的requestFocus發生。但如果我把它放到稍後執行的某些方法上,可以正常工作。

的Java Step1.class

public class Step1 extends Activity implements AdapterView.OnItemSelectedListener, View.OnClickListener { 
    Step1Binding step1Binding; 
    .... 
    SubmittedModel submittedModel; 
    boolean isTerritorySet = false; 
    boolean isCeNameSet = false; 
    boolean isDistributorSet = false; 
    boolean isPSRSet = false; 
    boolean isInEditMode = false; 
    String viewName; 

    private ArrayList<ArrayList<String>> areaList = new ArrayList<>(); 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     step1Binding = DataBindingUtil.setContentView(this, R.layout.layout_step1); 
     ..... 
     submittedModel = new SubmittedModel(); 
     submittedModel.setUser_id(UserInfo.getInstance().getUserInfo(this).getUserId()); 
     ..... 

     if (getIntent().hasExtra("value")) { 
      submittedModel = (SubmittedModel) getIntent().getSerializableExtra("value"); 
      step1Binding.setSubmitData(submittedModel); 
     } 
     if (getIntent().hasExtra("edit")) { 
      isInEditMode = getIntent().getBooleanExtra("edit", false); 
      if (isInEditMode) { 
       step1Binding.backBtn.setVisibility(View.VISIBLE); 
      } 
     } 
     if (getIntent().hasExtra("viewName")){ 
      viewName =getIntent().getStringExtra("viewName"); 
      requestFocusOnSelectedView(); //Method to select views 
     } 

     ..... 
    } 

    ....... 

    void requestFocusOnSelectedView() { 
     //request focus 
     if (isInEditMode & viewName != null) { 
      switch (viewName) { 
       case ViewName.territory: 
        step1Binding.territoryList.requestFocus(); 
        break; 
       case ViewName.ceName: 
        step1Binding.ceNameList.requestFocus(); 
        break; 
       case ViewName.distributor: 
        step1Binding.distributorList.requestFocus(); 
        break; 
       case ViewName.psr: 
        step1Binding.psrNameList.requestFocus(); 
        break; 
       case ViewName.subRoute: 
        step1Binding.subRoute.requestFocus(); 
        step1Binding.subRoute.setSelection(step1Binding.subRoute.getText().length()); 
        break; 
       case ViewName.outlet: 
        step1Binding.outletName.requestFocus(); 
        step1Binding.outletName.setSelection(step1Binding.outletName.getText().length()); 
        break; 
       case ViewName.retailerName: 
        step1Binding.retailerName.requestFocus(); 
        step1Binding.retailerName.setSelection(step1Binding.retailerName.getText().length()); 
        break; 
       case ViewName.retailerMobile: 
        step1Binding.retailerMobile.requestFocus(); 
        step1Binding.retailerMobile.setSelection(step1Binding.retailerMobile.getText().length()); 
        break; 
       case ViewName.address: 
        step1Binding.address.requestFocus(); 
        step1Binding.address.setSelection(step1Binding.address.getText().length()); 
        break; 


      } 
     } 
    } 

} 

XML +數據模型:代碼工作正常

回答

2

設置所有數據後,但請求焦點之前,請撥打

binding.executePendingBindings(); 

這將強制設置視圖值。

+0

更清潔的方法!謝謝 –

1

試試這個:

view.post(new Runnable() { 
    public void run() { 
     theView2Focus.requestFocus(); 
    } 
}); 

你的問題是你必須等待直到UI被創建。這正是你所發現的。

+0

我沒有得到哪個應該是'view'? –

+1

試試'step1Binding.getRoot()' – beeb

+0

謝謝!工作像魅力 –

相關問題