2017-07-16 16 views
0

私はアンドロイドスタジオの断片について学んでいます。ここ は、私はこの単純なコードをwrited ClickAndroidスタジオフラグメントonAttach。 onAttachではどうなりますか?

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); 
}} 

は答えてくれてありがとうです!

答えて

1

MainActivityは、フラグメントに定義するインターフェイスであるinterExample.setTextを実装しています。 これは、あなたのMainActivitysetTextインターフェイス内にメソッドを実装することを意味します(それらが何をするかを定義します)。

ここで、onAttach()についての主な質問にまっすぐ進みましょう。このメソッドは、フラグメントが初めて呼び出されたときに呼び出されます。このonAttach()

がある(フラグメントのライフサイクルを見てみましょう)ここ

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

コードは、私たちが渡していることを言おうとしているようなコードcontext

stにさらにそれを考え簡素化しますこのフラグメントを呼び出すアクティビティ(アクティビティがコンテキストなのでcontext)をst MainActivityがこのフラグメントを呼び出すようにしてください。MainActivitystです。

注:(setText)は、をsetTextにキャストしているため、ここではアクティビティはsetTextとなります。我々はすでにMainActivity

でそれらを実装するため

それでは、私たちは、stを使用してMainActivity INI方法を実行することができます

関連する問題