我一直在学习android studio中的片段。 这是我一直在阅读的内容 Click 和Click.
我写了这个简单的代码。单击片段(frag.xml)中的按钮时,将显示文本(activity_main.xml)。代码工作正常,但我无法理解onAttach中发生了什么。有人可以用简单的方法解释一下这个关于代码的问题吗?我得到了trycatch和sout消息,但是否则我迷路了。
@Override
public void onAttach(Context context) {
super.onAttach(context);
try{
st =(setText) context;
}catch (Exception e){
System.out.println("Virhe " + e);
}
}
以下是代码的其余部分
import android.content.Context;
import android.support.v4.app.Fragment;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
public class interExample extends Fragment {
setText st;
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.frag,container,false);
Button bt =(Button) view.findViewById(R.id.button);
bt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
st.text("fragone pressed");
}
});
return view;
}
public interface setText{
void text(String text);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try{
st =(setText) context;
}catch (Exception e){
System.out.println("Virhe " + e);
}
}
这是MainActivity
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.os.Bundle;
import android.support.v4.app.FragmentTransaction;
import android.widget.TextView;
public class MainActivity extends FragmentActivity implements interExample.setText{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Fragment f1 = new interExample();
FragmentManager fm = getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.line1,f1);
ft.commit();
}
@Override
public void text(String t){
TextView tv = (TextView) findViewById(R.id.textview);
tv.setText(t);
}}
感谢您的回答!
答案 0 :(得分:1)
您可以看到您的MainActivity
工具interExample.setText
是您在片段中定义的界面。
这意味着您的MainActivity
将在setText
接口内实现该方法(定义它们的作用)。
现在让我们直接讨论关于onAttach()
的主要问题,这个方法是在第一次调用片段时调用的。 (看一下片段生命周期)
在此onAttach()
中有类似
try{
st =(setText) context;
}catch (Exception e){
System.out.println("Virhe " + e);
}
此处代码试图说我们正在将context
传递给st
进一步简化它将传递给调用此片段的任何活动(context
,因为Activity是一个上下文)到st
MainActivity
正在调用此片段,因此此处MainActivity
为st
。
注意:(setText
)只是将context
转换为setText
,因此此处的活动将充当setText
。
那么我们可以使用MainActivity
执行ini st
方法,因为我们已经在MainActivity