我的片段没有按按钮显示在OnClickListener上

时间:2016-10-05 09:17:58

标签: android android-fragments

我有片段的问题,我创建的内容:

这是一个自定义列表

    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();

请帮忙。我不知道我做错了什么。

4 个答案:

答案 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需要充气。