我正试图了解这一行的含义:
activityCallback =(ToolbarListener)上下文
在表达式下-
public class ToolbarFragment extends Fragment implements SeekBar.OnSeekBarChangeListener {
private static int seekValue = 10;
private static EditText editText;
ToolbarListener activityCallback;
public interface ToolbarListener {
public void onButtonClick (int position, String text);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {activityCallback = (ToolbarListener) context;}
catch (ClassCastException e) {
throw new ClassCastException(context.toString() + "must implement ToolBarListener");
}
}
我了解将使用上述表达式创建对上下文的引用(此处为“父活动”)并将其存储在activitycallback变量中。
但是,我无法理解如何将接口对象强制转换为活动(此处为上下文)。
我能够完全理解其他代码,并且我的项目正在运行。这是一个项目,其中父活动使用侦听器接口与两个片段进行通信。
我已附加了整个项目的Java文件,以防您可能需要查看代码。
关于, 拉维。
----ToolbarFragment.java-----
package com.ebookfrenzy.fragmentexample;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.SeekBar;
public class ToolbarFragment extends Fragment implements SeekBar.OnSeekBarChangeListener {
private static int seekValue = 10;
private static EditText editText;
ToolbarListener activityCallback;
public interface ToolbarListener {
public void onButtonClick (int position, String text);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {activityCallback = (ToolbarListener) context;}
catch (ClassCastException e) {
throw new ClassCastException(context.toString() + "must implement ToolBarListener");
}
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
// inflate the layout for this fragment
View view = inflater.inflate(R.layout.toolbar_fragment, container,false);
editText = (EditText) view.findViewById(R.id.editText1);
final SeekBar seekBar = view.findViewById(R.id.seekBar1);
seekBar.setOnSeekBarChangeListener(this);
final Button button = view.findViewById(R.id.button1);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
buttonClicked(v);
}
});
return view;
}
private void buttonClicked(View v) {
activityCallback.onButtonClick(seekValue, editText.getText().toString());
}
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
seekValue = progress;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
}
-----TextFragment.java----
package com.ebookfrenzy.fragmentexample;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class TextFragment extends Fragment {
private static TextView textView;
@Override
public View onCreateView(
LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
// inflate the layout for this fragment
View view = inflater.inflate(R.layout.text_fragment, container, false);
textView = (TextView)view.findViewById(R.id.textView1);
return view;
}
public void changeTextProperties (int fontSize, String text) {
textView.setTextSize(fontSize);
textView.setText(text);
}
}
----FragmentActivity.java----
package com.ebookfrenzy.fragmentexample;
import android.app.Activity;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class FragmentExampleActivity extends FragmentActivity
implements ToolbarFragment.ToolbarListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment_example);
}
@Override
public void onButtonClick(int fontSize, String text) {
TextFragment textFragment = (TextFragment)
getSupportFragmentManager().findFragmentById(R.id.text_fragment);
textFragment.changeTextProperties(fontSize, text);
}
}
答案 0 :(得分:0)
在不同情况下,可能有几种不同的活动可以承载此片段。因此,我们制定了一条规则:承载此片段的任何活动都必须实现ToolbarListener。该接口定义了片段和承载该片段的活动之间的“契约”。在onAttach()中,我们验证上下文是否为ToolbarListener,然后继续将演员表保存到ToolbarListener以便以后使用。
由于活动实现了ToolbarListener,因此ToolbarListener将成为实现的Activity对象的Parent。因此,您可以进行类型转换。