【问题标题】:How to set OnClickListener in a View如何在视图中设置 OnClickListener
【发布时间】:2017-05-02 22:20:24
【问题描述】:

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

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

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 或一个 Fragment (它不一定是一个)

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

我还在代码的其中一个部分中编写了代码,我在其中调用了 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();
}

感谢您的帮助

【问题讨论】:

    标签: android android-fragments views onclicklistener


    【解决方案1】:

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

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

    MainActivity.this.getSupportFragmentManager();
    

    因为ArticleViews 不是一个活动。

    【讨论】:

    • 当我委托片段中的代码(在while循环中)时,onClickListener 不起作用
    • 我对 OP 做了一些改动。我理解您的回答,但在片段中代码不起作用。例如,Log.i 没有被执行。
    • 有什么事吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多