按下按钮的片段

时间:2017-12-01 12:14:50

标签: android android-fragments

因为,我是android的新手,我正在尝试学习片段以及它们是如何工作的。我试图制作一个长度转换器应用程序,基本上将meter转换为centimeters。简单,对吧? / p>

现在我有两部分活动,一部分是两个edittexts,它们是活动布局的一部分,而另一部分是fragment

这个片段基本上包含键盘,简而言之就是数字和操作符。就像正常的钙质一样。

enter image description here

enter image description here

现在我读到片段生命周期以及它应该如何工作。

所以我做的第一件事就是将所有内容都放在onCreateView方法中。

 @Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
    getRootView=inflater.inflate(R.layout.calci_keyboard,container,false);
    GridLayout gridLayout=(GridLayout) getRootView.findViewById(R.id.calciKeyboardGrid);
    for(int i=0;i<gridLayout.getChildCount();i++){
        b=(Button)gridLayout.getChildAt(i);
        b.setBackground(getResources().getDrawable(R.drawable.button_dark_gradient));
        b.setOnClickListener(this);
    }
    return getRootView;
}

问题是,点击事件有效,但edittext settext似乎无效。 Edittexts表现得非常奇怪。

现在,要删除我认为我正在访问活动UI,所以我应该在onActivityCreated函数中执行此操作,所以,我也试过了。

@Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
        getRootView=inflater.inflate(R.layout.calci_keyboard,container,false);

        return getRootView;
    }
     @Override
        public void onActivityCreated(@Nullable Bundle savedInstanceState) {
            super.onActivityCreated(savedInstanceState);
            @SuppressLint("InflateParams") View getView=(GridLayout) LayoutInflater.from(getActivity()).inflate(R.layout.calci_keyboard,null,false);
            GridLayout gridLayout=(GridLayout) getView.findViewById(R.id.calciKeyboardGrid); // i Logged this obj and it was there
            for(int i=0;i<gridLayout.getChildCount();i++){
                b=(Button)gridLayout.getChildAt(i);
                b.setBackground(getResources().getDrawable(R.drawable.button_dark_gradient));
                b.setOnClickListener(this);
            }
        }

当我以这种方式做事时,似乎无法让我的点击工作?

我该怎么做这个问题?无法找到任何解决方案。

对我轻松,谢谢:)

下面显示了我的onClick事件:

public void onClick(View view) {
        View focussedChild=getActivity().getCurrentFocus();
        switch (view.getId()){
            case R.id.calciKeyboardNine:{
                if (focussedChild instanceof EditText) {
                    firstPart=new StringBuilder("");
                    secondPart=new StringBuilder("");
                    EditText editText=(EditText)focussedChild;
                    if(focussedChild.getId()==R.id.lengthConverterFirst){
                       if(!TextUtils.isEmpty(firstPart.toString()))
                           firstPart.replace(0,firstPart.length()-1,editText.getText().toString()+"9");
                       firstPart.append("9");
                       editText.setText(firstPart.toString());
                       editText.setSelection(editText.length());
                       int a=Integer.parseInt(firstPart.toString());
                       a=a*100;
                       editText=getActivity().findViewById(R.id.lengthConverterSecond);//second edit text
                       editText.setText(Integer.toString(a));
                       editText.setSelection(editText.length());
                    }else if(focussedChild.getId()==R.id.lengthConverterSecond){
                        if(!TextUtils.isEmpty(secondPart.toString()))
                            secondPart.replace(0,secondPart.length()-1,editText.getText().toString()+"9");
                        secondPart.append("9");
                        editText.setText(secondPart.toString());
                        editText.setSelection(editText.length());
                        double a=Integer.parseInt(firstPart.toString());
                        a=a/100;
                        editText=getActivity().findViewById(R.id.lengthConverterFirst);//first edit text
                        editText.setText(Double.toString(a));
                        editText.setSelection(editText.length());

                    }
                }
            }
       }
  }

1 个答案:

答案 0 :(得分:0)

现在,为了删除我认为我正在访问Activity UI,所以我应该在onActivityCreated函数中执行此操作,所以,我也尝试了这个 - 它没有用,因为onActivityCreated()是片段不活动的方法。

尝试这一点 - 只需让您的edittexts在活动中保持静态,然后您可以通过活动的名称(如MainActivity.editText())在片段中访问它们。希望这有帮助