要写Fragment真的是要点功力,对我这种android 新手实在是很不直观,不过蜗牛还是试著去理解他,虽然还一知半解,可是至少可以实作deom program,在此顺便记录一下学习状况供日后参考.

 

我要设计一个简单的Fragment 并与一个管理Fragment的Activity沟通

简单化面如下:

device-2014-06-18-065000    

activity_main.xml :如下 (LinearLayout mytest将会被Fragmentf取代)

 

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="${packageName}.${activityClass}" >

 

<TextView
android:id="@+id/textView1"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="2"
android:text="TextView" />

 

<LinearLayout
android:id="@+id/mytest"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight="0.8"
android:orientation="vertical" >
</LinearLayout>

 

</LinearLayout>

 

 设计TestFragment.java

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Button;

public class TestFragment extends Fragment {
View view;
Button btn1,btn2,btn3;
OnHeadlineSelectedListener mCallback;
public interface OnHeadlineSelectedListener {

//======================>与Activity沟通区块,可以当作制式化
/**
* Called by HeadlinesFragment when a item is selected
*/
//这里可以设定传递的资料型态google范例为int 这里我使用String
public void onaitemSelected(String datestring); 

}

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);

// This makes sure that the container activity has implemented
// the callback interface. If not, it throws an exception.
try {
mCallback = (OnHeadlineSelectedListener) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString()
+ " must implement OnHeadlineSelectedListener");
}
}

//======================>(end)与Activity沟通区块

public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragmentcommunicate, container, false);

//在此设计Fragment UI元件
btn1=(Button)view.findViewById(R.id.button1);
btn2=(Button)view.findViewById(R.id.button2);
btn3=(Button)view.findViewById(R.id.button3);
btn1.setOnClickListener(new Btn_Listener());
btn2.setOnClickListener(new Btn_Listener());
btn3.setOnClickListener(new Btn_Listener());
return view;
}

//很一般的监听方法
private class Btn_Listener implements OnClickListener {

@Override
public void onClick(View v) {
if(v.getId()==R.id.button1){
mCallback.onaitemSelected(btn1.getText().toString()); //回传资料给activity
}else if(v.getId()==R.id.button2){
mCallback.onaitemSelected(btn2.getText().toString());
}else if(v.getId()==R.id.button3){
mCallback.onaitemSelected(btn3.getText().toString());
}
}
}

}

回到MainActivity.java

public class MainActivity extends Activity implements OnHeadlineSelectedListener {
private TextView tv1;
private FragmentManager fragMamager;
private FragmentTransaction fragTransaction;
private TestFragment testfragment;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv1=(TextView)findViewById(R.id.textView1);
fragMamager = getFragmentManager();
fragTransaction = fragMamager.beginTransaction();
testfragment = new TestFragment();
fragTransaction.add(R.id.mytest, testfragment);
fragTransaction.commit();
}

 

//eclipse MainActivity extends Activity implements OnHeadlineSelectedListener 再加入这行后会要求实作此时由eclipse自动产生
@Override
public void onaitemSelected(String datestring) {
// TODO 自动产生的方法 Stub
tv1.setText(datestring); //在此写入想要的动作
}
}

 

 

相关文章