2017-07-16 240 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

實現它們
相關問題