我有一个片段,我希望按下按钮时可以运行Calculate()函数。我的片段也基于其中一个模板。
我已经尝试过XML android:onClick的东西,尽管我认为它是在MainActivity而不是Fragment中查找的,所以会引发错误。 我还尝试了另一篇文章中的OnClickListener,尽管对其进行设置(如在OnCreateCiew中的代码中)会出错,但是这可能只是我对它的工作原理的业余知识。
这是我的calculate函数(当我单击按钮时我试图运行的函数),它位于片段活动中:
public void Calculate(View v) {
EditText InitialVelocityInput = getView().findViewById(R.id.initialVelocityInput);
EditText VelocityInput = getView().findViewById(R.id.velocityInput);
EditText AccelerationInput = getView().findViewById(R.id.accelerationInput);
EditText TimeInput = getView().findViewById(R.id.timeInput);
Log.d("bing", "bing");
}
如果需要,heres the whole fragment activity
使用XML onclick时,我的应用程序仅在按下按钮时崩溃。 使用OnClickListener时,由于错误我什至无法编译。 我没有太多的编码专业知识,无法知道模板片段代码在做什么,但是我假设它与之冲突,但是我正在设置OnClickListener。
这是我尝试设置OnClickListener的方法:
Button calculatebutton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View kinematicsCalculatorView = inflater.inflate(R.layout.fragment_fragment_calculator_kinematics, container, false);
calculatebutton = (Button) kinematicsCalculatorView.findViewById(R.id.calculateButton);
calculatebutton.setOnClickListener(this);
return kinematicsCalculatorView;
// Inflate the layout for this fragment
// return inflater.inflate(R.layout.fragment_fragment_calculator_kinematics, container, false);
}
public void onClick(View v) {
EditText InitialVelocityInput = getView().findViewById(R.id.initialVelocityInput);
EditText VelocityInput = getView().findViewById(R.id.velocityInput);
EditText AccelerationInput = getView().findViewById(R.id.accelerationInput);
EditText TimeInput = getView().findViewById(R.id.timeInput);
Log.d("bing", "bing");
}
但是,this
中的calculatebutton.setOnClickListener(this);
显示为错误(setOnClickListener(android.view.View.OnClickListener) in View cannot be applied to (com.example.myApp.FragmentCalculatorKinematics)
)。 onClick方法显示为从未使用。
答案 0 :(得分:0)
我找到了某种解决方案... 我没有将我的方法放在FragmentActivity中,而是将其放入MainActivity中,并在片段的XML文件中设置了android:OnClick =“ Calculate”。尽管我不确定这样做是否会带来任何回想。
答案 1 :(得分:0)
您需要为View.OnClickListener
类实现fragment
接口。
这是一段代码。
public class MyFragment extends Fragment implements View.OnClickListener{ // implements the View.OnClickListener interface here
Button calculatebutton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View kinematicsCalculatorView = inflater.inflate(R.layout.fragment_fragment_calculator_kinematics, container, false);
calculatebutton = (Button) kinematicsCalculatorView.findViewById(R.id.calculateButton);
calculatebutton.setOnClickListener(this);
return kinematicsCalculatorView;
// Inflate the layout for this fragment
// return inflater.inflate(R.layout.fragment_fragment_calculator_kinematics, container, false);
}
public void onClick(View v) {
switch(v.getId()){ // getting the id of clicked item.
case R.id.calculateButton: // When the button will pressed.
EditText InitialVelocityInput = getView().findViewById(R.id.initialVelocityInput);
EditText VelocityInput = getView().findViewById(R.id.velocityInput);
EditText AccelerationInput = getView().findViewById(R.id.accelerationInput);
EditText TimeInput = getView().findViewById(R.id.timeInput);
Log.d("bing", "bing");
break;
}
}}
希望这对您有用。
答案 2 :(得分:0)
如果您通过XML将片段添加到活动中: 来自活动课:
YourFragmentClass fragment = (YourFragmentClass)(yourActivity.getSupportFragmentManager().findFragmentById(fragment_id));.
您还可以通过标签在活动中找到片段(标签是在您向活动中主动添加片段时分配给片段的字符串)。
YourFragmentClass fragment = (YourFragmentClass)(yourActivity.getSupportFragmentManager().findFragmentByTag(fragment_tag));
。获取片段后,现在可以通过为按钮设置OnClickListener从活动中调用片段方法。
btn.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v)
{
fragment.methodOfFragment();
}
});