如何在视图中设置OnClickListener

时间:2017-05-02 22:20:24

标签: android android-fragments views onclicklistener

我有一个这样的方法,在一个公共类中,以便在任何我想要的地方创建视图。

视图正在正确创建,但我还需要在单击该布局时添加一个侦听器。

public class ArticleViews {
    public LinearLayout getTinyView(final Context cont){

    //Main layout
    LinearLayout x = new LinearLayout(cont);
    ....

我的尝试:

    x.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            ArticleTools.selectedArticle = art;
            Fragment art = new ArticleDetailsFragment();

            FragmentManager fragmentManager = ¿?¿?¿?getSupportFragmentManager();
            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
            fragmentTransaction.replace(R.id.include_main, art);
            fragmentTransaction.commit();

        }
    });

但是获得 getSupportFragmentManager(); 是不可能的,因为这个类不是Activity或片段(并且它不必是一个)

所以,我的问题是,我该怎么做?

我还在我调用ArticleView类的代码的其中一部分编写了代码......这是一个片段,所以在我看来代码应该可以工作。

while(it2.hasNext()){
                    DataSnapshot ds = it2.next();
                    Articulo a = ds.getValue(Articulo.class);
                    a.setUserId(usuerId);
                    ArticleViews av = new ArticleViews(a);
                    av.getTinyView(getContext()).
 setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            setClickListenerToView();
                        }
                    });
                    articles.add(av);
                }

文章是......

final ArrayList<ArticleViews> articles = new ArrayList<>();

但应用程序没有输入代码

public void setClickListenerToView(){
    Log.i("OnClick", "enter");
    Fragment art = new ArticleDetailsFragment();
    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
    fragmentTransaction.replace(R.id.include_main, art);
    fragmentTransaction.commit();
}

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

由于您没有getSupportFragmentManager(),因此无法获得Activity。您应该将onClick()中发生的代码委托给Activity,以便获得所需内容。

回答其他人发帖。 OP无法像您建议的那样获得FragmentManager

MainActivity.this.getSupportFragmentManager();

因为ArticleViews不是活动。