可以把OnClickListener写成parcelable吗?

can write OnClickListener into parceable?

您好,我遇到了 OnClickListener 的问题

View.OnClickListener listener= new View.OnClickListener() 
{ 
@Override 
public void onClick(View view) 
   { 
     Toast.makeText(Conversations.this, "click on  MSG", 
           Toast.LENGTH_SHORT).show(); 
  } 
};

============================================= ===========================

我需要将此侦听器放入可解析的片段中。 我不是 parceableing 侦听器,而是在 readvalue 为 null 之后以及单击 app crasher 时,因为它是对 null 对象的引用。

现在我需要找到一些可用于保存和读取对象 (View.OnClickListener) 的方法(如果可解析或类似的东西)。 没有这个我需要重建我的项目:(

请帮助我。

谢谢

_______________________________________________________--

我在片段中没有片段我希望所有片段都放入 "extra" 和其他 activity 从 extra..

中读取

Intent i= new Intent(Conversations.this,MessagesSingleFragmentActivity.cla‌​ss); i.putExtra("Fragment1", (Parcelable) recycleMessage); startActivity(i);

在其他 activity 中有

Intent extras = getIntent(); Fragment fragment = (Fragment) extras.getParcelableExtra("Fragment1"); fm.beginTransaction().replace(R.id.fragment_container, fragment).commit();

不,您不能将 OnClickListener 作为 Parcelable 传递,但是,如果您想观察从一个片段到另一个片段的点击,那么您必须在第二个片段中实现 onclick。

FragA.java://谁有onClickListener

Runnable run;

public void setClick(Runnable run){
   this.run = run;
}

view.setOnClickListener(new OnClickListener(){
    public void onClick(View v){
        // do something in onclick
        if(run!=null){run.run();}
    }
});

FragB.java:

((FragA)getParentFragment()).setClick(
       new Runnable() {
            @Override
            public void run() {
                // do something in other fragment
            }
        }
)

更新:

如果你想在 ActivityB 上执行 ActivityA 的 onClick,那么 EventBus 是该用途的最佳选择 Otto or EventBus来自 GreenBot

建议通过 Activity.. 或者更一般地通过 Activity 符合的接口在片段之间进行交互。

还有一件事:如果您在两个片段中都有共同的功能,也许最好将它提取到 Activity?