我有片段的问题,我创建的内容:
这是一个自定义列表
class CustomList extends ArrayAdapter<String> {
private final Activity activity;
private final String[] web;
private final Integer[] imageID;
CustomList(Activity activity, String[] web, Integer[] imageID){
super(activity, R.layout.list_single, web);
this.activity = activity;
this.web = web;
this.imageID = imageID;
}
@NonNull
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = activity.getLayoutInflater();
View rowView = inflater.inflate(R.layout.list_single, null, true);
TextView txtTitle = (TextView) rowView.findViewById(R.id.txt);
ImageView img = (ImageView) rowView.findViewById(R.id.img);
txtTitle.setText(web[position]);
img.setImageResource(imageID[position]);
return rowView;
}
}
这是一个片段:
public class BackgroundSelectFragment extends Fragment {
ListView list;
String[] web = {
"Clearing",
"Scroll",
"Desert",
"World",
"Old City",
"Clip Board",
} ;
Integer[] imageId = {
R.drawable.clearing,
R.drawable.scroll,
R.drawable.desert,
R.drawable.world,
R.drawable.city,
R.drawable.clipboard,
};
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.listview_fragment, container, false);
CustomList adapter = new
CustomList(getActivity(), web, imageId);
list = (ListView) container.findViewById(R.id.list);
list.setAdapter(adapter);
list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
Toast.makeText(getActivity(), "You Clicked at " +web[+ position], Toast.LENGTH_SHORT).show();
}
});
return view;
}
}
最后我尝试打开一个片段:
backgroundBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FragmentManager fm = getFragmentManager();
fm.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in, android.R.animator.fade_out)
.show(backgroundSelectFragment)
.commit();
}
});
我没有任何错误,当我点击按钮时没有出现,我的片段在哪里?当然我在MainActivity OnCreate中初始化它,如:
backgroundSelectFragment = new BackgroundSelectFragment();
请帮忙。我不知道我做错了什么。
答案 0 :(得分:2)
您必须在基本布局视图中添加或替换您的片段
fm.beginTransaction()
.setCustomAnimations(android.R.animator.fade_in,android.R.animator.fade_out)
.replace(containerViewId, fragment, tag) //either use replace
.add(containerViewId, fragment, tag) //or add
.show(backgroundSelectFragment)
.commit();
其中containerViewId是应添加片段的视图 你可以找到replace()之间的区别并在这里添加: Difference between add(), replace(), and addToBackStack()
答案 1 :(得分:0)
我认为你的代码错了,请检查一下..
View view = inflater.inflate(R.layout.listview_fragment, container, false);
CustomList adapter = new
CustomList(getActivity(), web, imageId);
list = (ListView) **container**.findViewById(R.id.list);
到
View view = inflater.inflate(R.layout.listview_fragment, container, false);
CustomList adapter = new
CustomList(getActivity(), web, imageId);
list = (ListView) **view** .findViewById(R.id.list);
答案 2 :(得分:0)
尝试使用片段事务的添加或替换方法。
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_from_right, R.anim.slide_out_left, android.R.anim.slide_in_left, android.R.anim.slide_out_right);
fragmentTransaction.add(container, fragment, fragment.getClass().getSimpleName());
fragmentTransaction.commit();
同时改变&#34;容器&#34;在您的片段类中查看初始化视图。
答案 3 :(得分:0)
在按钮点击事件
中尝试以下代码 BackgroundSelectFragment bFragment = new BackgroundSelectFragment();
getSupportFragmentManager().beginTransaction().setCustomAnimations(R.anim.slide_from_right, R.anim.slide_out_left, android.R.anim.slide_in_left, android.R.anim.slide_out_right).replace(R.id.fragmentContainer, bFragment).commit();
在此处,R.id.fragmentContainer
是布局的ID,其中BackgroundSelectFragment
需要充气。