Android:如何跟踪在将数据传输到另一个片段时单击的多个按钮
你好,我是android编程新手, 我有这个xml文件及其相关的java片段类Android:如何跟踪在将数据传输到另一个片段时单击的多个按钮,android,Android,你好,我是android编程新手, 我有这个xml文件及其相关的java片段类 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" >
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<Button
android:id="@+id/sisButton"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignParentTop="true"
android:layout_alignRight="@+id/smallButton"
android:layout_alignParentLeft="true"
android:layout_marginLeft="16dp"
android:layout_marginTop="18dp"
android:text="@string/sis" />
<Button
android:id="@+id/soeButton"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignBaseline="@+id/sisButton"
android:layout_centerHorizontal="true"
android:text="@string/soe" />
<Button
android:id="@+id/solButton"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignBaseline="@+id/sisButton"
android:layout_alignParentRight="true"
android:text="@string/sol" />
<Button
android:id="@+id/sobButton"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_alignLeft="@+id/textViewNumLockersAvailable"
android:layout_below="@+id/sisButton"
android:layout_marginTop="18dp"
android:layout_alignParentLeft="true"
android:layout_marginLeft="16dp"
android:text="@string/sob" />
<Button
android:id="@+id/allSchoolsButton"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_marginLeft="150dp"
android:layout_toRightOf="@+id/sobButton"
android:layout_alignBaseline="@+id/sobButton"
android:text="@string/all" />
<Button
android:id="@+id/smallButton"
android:layout_width="wrap_content"
android:layout_height="35dp"
android:layout_below="@+id/sobButton"
android:layout_marginTop="28dp"
android:text="@string/small" />
<Button
android:text="@string/large" />
<Button
android:text="@string/all" />
<Button
android:text="@string/lv1" />
<Button
android:text="@string/lv2" />
<Button
android:text="@string/lv3" />
<Button
android:text="@string/all" />
<Button
android:text="@string/ViewNumLockersAvailable" />
<Button
android:text="@string/search" />
<Button
android:text="@string/logout" />
</RelativeLayout>
问题,当我将数据传输到另一个片段时,如何跟踪单击的按钮
请帮忙
当我将数据传输到另一个片段时,如何跟踪单击的按钮
正如所理解的,您正在寻找片段间数据传输。让您的父活动通过接口处理此传输(或您想要的任何其他操作):
public interface InterFragmentDataTransferer {
public void btnListener(String dataStr1, String dataStr2);
// You may define here as many other methods as you need.
}
然后,在父活动中实现此接口,用所需的操作覆盖方法并最终实例化片段:
public MyFragmentHolderActivity extends Activity implements InterFragmentDataTransferer {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_parent_activity_layout);
// Do other instantiation jobs;
// .
// .
mFragment = MyFragment.newInstance();
}
public void btnListener(String dataStr1, String dataStr2) {
// You've the desired data here :D ... so do whatever you'd like.
}
}
最后,您将在片段的onAttach方法内的调用者片段内获得接口实例,该实例可用于传递数据:
public class MyFragment extends Fragment implements OnClickListener {
private InterFragmentDataTransferer mFragDataTransferer;
public static Fragment newInstance() {
return new MyFragment();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
mFragDataTransferer = (InterFragmentDataTransferer) activity;
}
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.d(TAG, "inside OncreateView()");
ViewGroup rv = (ViewGroup) inflater.inflate(
R.layout.your_layout, container, false);
(rv.findViewById(R.id.sisButton))
.setOnClickListener(this);
(rv.findViewById(R.id.soeButton))
.setOnClickListener(this);
(rv.findViewById(R.id.solButton))
.setOnClickListener(this);
(rv.findViewById(R.id.sobButton))
.setOnClickListener(this);
(rv.findViewById(R.id.allSchoolsButton))
.setOnClickListener(this);
(rv.findViewById(R.id.smallButton))
.setOnClickListener(this);
// TODO write your other code
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.sisButton:
// TODO write button click-action here
mFragDataTransferer.btnListener(dataStr1, dataStr2);
break;
case R.id.soeButton:
// TODO write button click-action here
mFragDataTransferer.btnListener(dataStr1, dataStr2);
break;
case R.id.solButton:
// TODO write button click-action here
mFragDataTransferer.btnListener(dataStr1, dataStr2);
break;
case R.id.sobButton:
// TODO write button click-action here
mFragDataTransferer.btnListener(dataStr1, dataStr2);
break;
case R.id.allSchoolsButton:
// TODO write button click-action here
mFragDataTransferer.btnListener(dataStr1, dataStr2);
break;
case R.id.smallButton:
// TODO write button click-action here
mFragDataTransferer.btnListener(dataStr1, dataStr2);
break;
default:
break;
}
}
}
额外提示:不要重写片段构造函数来传递任何数据/接口,这可能会引发FragmentInstanceException,尽管通过newInstance()方法作为param传递接口更安全,但正如我所读到的,也不推荐这样做