Android 如何从片段中的活动(而不是父级)调用方法?
我找到了这个 但这没用。我有打字错误。新的碎片。请帮忙 这是我的片段,我想在点击按钮时调用该方法Android 如何从片段中的活动(而不是父级)调用方法?,android,android-fragmentactivity,method-call,Android,Android Fragmentactivity,Method Call,我找到了这个 但这没用。我有打字错误。新的碎片。请帮忙 这是我的片段,我想在点击按钮时调用该方法 public class Fragment1 extends Fragment { View view; public CardView stepEnableUi, enablewaterui, stepCountingUi, countingwaterUI; @Override public View onCreateView(LayoutInflater
public class Fragment1 extends Fragment {
View view;
public CardView stepEnableUi, enablewaterui, stepCountingUi, countingwaterUI;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate ( R.layout.fragment_fragment1, container, false );
initialization ( );
return view;
}
public void initialization() {
final Button enablestep = view.findViewById ( R.id.stepsenable );
final Button enablewater = view.findViewById ( R.id.waterenable );
stepEnableUi = view.findViewById ( R.id.stepenableui );
enablewaterui = view.findViewById ( R.id.waterenableui );
stepCountingUi = view.findViewById ( R.id.stepcountingUI );
countingwaterUI = view.findViewById ( R.id.watercountingUI );
enablestep.setOnClickListener ( new View.OnClickListener ( ) {
@Override
public void onClick(View v) {
((StepCounter)getActivity ()).connectGoogle ( );
}
} );
这是我的活动方法
public class StepCounter extends AppCompatActivity implements OnDataPointListener,
GoogleApiClient.ConnectionCallbacks,
GoogleApiClient.OnConnectionFailedListener {
private static final int REQUEST_OAUTH = 1;
private static final String AUTH_PENDING = "auth_state_pending";
private boolean authInProgress = false;
Button historyView;
private GoogleApiClient mApiClient;
TextView stepsonbar, steps, min, km, cal;
private ResultCallback<Status> mSubscribeResultCallback;
private ResultCallback<Status> mCancelSubscriptionResultCallback;
private ResultCallback<ListSubscriptionsResult> mListSubscriptionsResultCallback;
FragmentManager fm = getSupportFragmentManager();
FitChart fitChart;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView( R.layout.activity_step_counter);
initialize();
if (savedInstanceState != null) {
authInProgress = savedInstanceState.getBoolean(AUTH_PENDING);
}
initCallbacks();
mApiClient = new GoogleApiClient.Builder(this)
.addApi(Fitness.SENSORS_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ_WRITE))
.addApi(Fitness.RECORDING_API)
.addScope(new Scope(Scopes.FITNESS_ACTIVITY_READ))
.addConnectionCallbacks(this)
.addOnConnectionFailedListener(this)
.enableAutoManage(this, 0, this)
.build();
}
public void initialize(){
steps=findViewById(R.id.steps);
stepsonbar=findViewById(R.id.stepsonbar);
min = findViewById(R.id.min);
km = findViewById(R.id.km);
cal = findViewById(R.id.cal);
fitChart=findViewById ( R.id.fitchart );
fitChart.setMinValue ( 0f );
fitChart.setMaxValue ( 50000f );
historyView=findViewById ( R.id.buttonweekdata );
historyView.setOnClickListener ( new View.OnClickListener ( ) {
@Override
public void onClick(View v) {
Intent i=new Intent ( StepCounter.this,HistoryWalking.class );
startActivity ( i );
}
} );
}
@Override
protected void onStart() {
super.onStart();
}
public void connectGoogle(){
mApiClient.connect();
}
@Override
public void onActivityResult(int requestCode,int resultCode, Intent data) {
if( requestCode == REQUEST_OAUTH ) {
authInProgress = false;
if( resultCode == RESULT_OK ) {
if( !mApiClient.isConnecting() && !mApiClient.isConnected() ) {
mApiClient.connect();
Fragment1 fragment = (Fragment1) fm.findFragmentById(R.id.homescreen);
fragment.showStepCounter();
}
} else if( resultCode == RESULT_CANCELED ) {
Log.e( "GoogleFit", "RESULT_CANCELED" );
}
} else {
Log.e("GoogleFit", "requestCode NOT request_oauth");
}
}
首先,您需要在带有标记的活动中提交您的片段
getSupportFragmentManager()
.beginTransaction()
.replace(frame, fragment, "YOUR FRAGMENT NAME")
.commit();
现在,您将能够通过标记找到您的片段
Fragment fragment = getSupportFragmentManager().findFragmentByTag("YOUR FRAGMENT NAME");
投下你的碎片
if(fragment instanceof YourFragment) {
YoutFragment yourFragment = (YoutFragment)fragment;
yourFragemtn.yourMethod();
}
由于StepCounter类不是片段Fragment1的父活动,请尝试以下操作
StepCounter mStepCounter=new StepCounter();
mStepCounter.connectGoogle();
确保正确初始化这些方法中的值显示更多代码的可能重复项。@androidnoobdev我已经说过bro我已经尝试过这个答案这意味着您正在将不同的活动强制转换到不同的活动。检查您的片段是否将StepCounter作为父活动或MainActivity。我的片段的父活动是MainActivity。StepCounter是另一个你能澄清一点吗?这会更有帮助。我当前正在使用viewpager显示我的片段。如果使用viewpager,可以添加viewpager.SimpleOnPageChangeListener以跟踪当前位置。
StepCounter mStepCounter=new StepCounter();
mStepCounter.connectGoogle();