我需要你的帮助。我已经工作了2天,仍然对碎片感到困惑。
我的目标是创建一个包含listview的片段。在每一个项目点击,它将显示另一个片段与另一个列表视图(像一个子菜单,但显示在不同的片段)。
这里是Fragment
的代码public class MasterFragment extends Fragment implements AdapterView.OnItemClickListener {
ListView masterlist;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.master_fragment, container, false);
masterlist = (ListView) view.findViewById(R.id.masterlistview);
ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.masterlist, android.R.layout.simple_list_item_1);
masterlist.setAdapter(adapter);
masterlist.setOnItemClickListener(this);
return view;
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
long position = masterlist.getItemIdAtPosition(i);
if(position == 0){
System.out.println("Item 0");
} else {
System.out.println("Item 1");
}
}
在我的onItemClick,我怎么能调用片段。我有2个片段与列表视图,但有不同的数组在他们。比如如果position == 0,调用FragmentA。否则,调用FragmentB。
我已经创建了一个接口在我的MasterFragment
public interface Communicator {
void respond(int index);
}
然后实现它在我的MainActivity..但是我不知道怎么做
创建回调接口。在fragment被调用的活动中实现这个接口。使用回调方法单击片段发送位置中的项目。然后调用关于position
的片段你的片段应该是这样的
public class MasterFragment extends Fragment implements AdapterView.OnItemClickListener {
public inteface OnItemClickResponse
{
void itemClick ( int position);
}
OnItemClickResponse itemClickResponse;
ListView masterlist;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.master_fragment, container, false);
masterlist = (ListView) view.findViewById(R.id.masterlistview);
ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.masterlist, android.R.layout.simple_list_item_1);
masterlist.setAdapter(adapter);
masterlist.setOnItemClickListener(this);
itemClickResponse = (OnItemClickResponse) getActivity();
return view;
}
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
long position = masterlist.getItemIdAtPosition(i);
if (position == 0) {
itemClickResponse.itemClick(position);
System.out.println("Item 0");
} else {
itemClickResponse.itemClick(position);
System.out.println("Item 1");
}
}
和在活动(必须实现接口'OnItemClickResponse')
@Override
public void itemClick(int position) {
if (position == 1) {
Fragment fragment = new FirstFragment();
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, fragment).commit();
} else {
Fragment fragment = new SecondFragment();
getSupportFragmentManager().beginTransaction()
.replace(android.R.id.content, fragment).commit();
}
}
if(position == 0){
Fragment newFragment = new FragmemtA();
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, newFragment).addToBackStack(null).commit();
}
else
{
Fragment newFragment = new FragmemtB();
FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.container, newFragment).addToBackStack(null).commit();
}