因为,我是android的新手,我正在尝试学习片段以及它们是如何工作的。我试图制作一个长度转换器应用程序,基本上将meter
转换为centimeters
。简单,对吧? / p>
现在我有两部分活动,一部分是两个edittexts
,它们是活动布局的一部分,而另一部分是fragment
。
这个片段基本上包含键盘,简而言之就是数字和操作符。就像正常的钙质一样。
现在我读到片段生命周期以及它应该如何工作。
所以我做的第一件事就是将所有内容都放在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());
}
}
}
}
}
答案 0 :(得分:0)
现在,为了删除我认为我正在访问Activity UI,所以我应该在onActivityCreated函数中执行此操作,所以,我也尝试了这个 - 它没有用,因为onActivityCreated()是片段不活动的方法。
尝试这一点 - 只需让您的edittexts在活动中保持静态,然后您可以通过活动的名称(如MainActivity.editText())在片段中访问它们。希望这有帮助