我Fragments
ButtonFragment
中有2 ListViewFragment
- Activity
和MainActivity
。
ButtonFragment
包含Button
,ListViewFragment
包含ListView
。
每次点击ButtonFragment
Button
,我都希望ListViewFragment
显示/隐藏。
如何正确编码?
目前我的代码如下:
MainActivity.java
public class MainActivity extends Activity implements Communicator {
ButtonFragment buttonFrag;
ListViewFragment listviewFrag;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
buttonFrag= new ButtonFragment();
listviewFrag = new ListViewFragment();
manager = getFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.button_fragment, buttonFrag, "Fragment1");
transaction.add(R.id.listview_fragment, listviewFrag, "Fragment2");
transaction.commit();
}
}
ButtonFragment.java
public class DynamicButtonsFragment extends Fragment implements View.OnClickListener {
Button btn;
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.button_fragment_layout, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public void onClick(View v) {
//?? hide listview fragment from here ??
}
}
ListViewFragment.java
public class ListViewFragment1 extends Fragment {
protected ArrayAdapter<String> adapter1;
@Override
public View onCreateView(LayoutInflater inflater,
@Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.list_view_fragment, container, false);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
}
所以我的问题是我在哪里实现ListViewFragment
的显示/隐藏?我觉得我应该通过MainActivity
的{{1}}方法将数据发送到onClick
。但我不知道该怎么做。
或者我只在ButtonFragment
中添加代码,因为MainActivity
可以访问所有MainActivity
?
我遇到问题因为Fragments
位于Button
,而不是Fragment
的一部分。我还没有真正看到这样的案例......
有人可以帮忙吗?
答案 0 :(得分:1)
您无法直接显示/隐藏片段。您可以显示/隐藏像Listview这样的UI对象。如果您愿意,可以使用FragmentTransaction
显示/隐藏片段间接,您可以调用其方法添加,删除或替换。
示例代码的链接是Fragments
答案 1 :(得分:1)
这样做..
android.app.Fragment fragment = getActivity().getFragmentManager().findFragmentByTag("YOUR_FRAGMENT_TAG");
getActivity().getFragmentManager().beginTransaction().hide(fragment);
在点击活动中!
当你添加这样的片段时还有一件事......
transaction.add(R.id.button_fragment, buttonFrag, "Fragment1");
transaction.add(R.id.listview_fragment, listviewFrag, "Fragment2");
您需要提供容器ID而不是片段的ID。
示例:对于MainActivity容器,请使用R.id.containerMain
答案 2 :(得分:0)
如果你在片段中想要做一些MainActivity函数,你可以尝试
@Override
public void onClick(View v) {
//?? hide listview fragment from here ??
((MainActivity)getActivity()).hidelistView();
//hidelistView you should imp in your MainActivity
}
答案 3 :(得分:0)
如果您在同一布局中有片段,则可以使用以下代码: http://www.java2s.com/Code/Android/Core-Class/Demonstrationofhidingandshowingfragments.htm
如果没有,那么你可以使用几种可能性...... 您可以使用Intent将数据发送到MainActivity。 您可以在单个实例中存储指向MainActivity的指针。
你也可以使用Handler发送消息,但上面描述的方式更容易实现,应该足够了。