2017-07-16 81 views
0

我一直在学习android工作室的片段。 这是我一直在阅读 ClickClick.Android studio Fragment onAttach。 onAttach会发生什么?

我所著这个简单的代码。当您单击片段中的按钮(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); 
}} 

感谢您的答案!

回答

1

您可以看到您的MainActivity实现了interExample.setText,这是您在片段中定义的接口。 这意味着您的MainActivity将执行setText界面中的方法(定义他们所做的)。

现在让我们直接回到关于onAttach()的主要问题,首先调用此方法调用一个片段。 (看看片段生命周期)

在此 onAttach()

也有类似的代码

try{ 
    st =(setText) context; 
}catch (Exception e){ 
    System.out.println("Virhe " + e); 
} 

这里的代码是想说,我们正在过contextst

进一步简化它会将要传递的活动称为此片段(context,因为活动是上下文)到st MainActivity正在调用此片段,因此MainActivityst此处。

注意:(setText)只是将context转换为setText,以便此处的活动将充当setText

然后我们可以通过使用st INI MainActivity执行方法,因为我们已经在MainActivity

实现它们