1

空我有这样的结构:监听器总是在自定义视图类

活动 - > RecyclerView适配器 - >自定义视图

这里是我的代码(有一些地方留出了清晰)。

我的活动,MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private final String TAG = "MainActivity"; 

    private EditText textField; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 

     if (toolbar != null) { 
      setSupportActionBar(toolbar); 
     } 

     textField = (EditText) findViewById(R.id.textField); 

     // Adapter code 
    } 
} 

我的适配器,MyAdapter.java

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

    private static final String TAG = "MyAdapter"; 

    private Context context; 

    public MyAdapter(Context context) { 
     this.context = context; 
    } 

    public class ViewHolder extends RecyclerView.ViewHolder { 
     public ViewHolder(View v) { 
      super(v); 
     } 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     LayoutInflater inflater = LayoutInflater.from(context); 

     CustomView customView = new CustomView(context); 

     customView.setCustomViewListener(new CustomView.CustomViewListener() { 
      @Override 
      public void onEventComplete() { 
       Log.d(TAG, "EVENT COMPLETE"); 
      } 
     }); 

     ViewHolder viewHolder = new ViewHolder(customView); 

     return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(final ViewHolder holder, int position) { 
     // 
    } 

    // other methods 

} 

而我的自定义视图,CustomView.java

public class CustomView extends RelativeLayout { 

    private final String TAG = "CustomView"; 

    private CustomViewListener mListener = null; 

    private RelativeLayout mLayout; 
    private ImageView mPicture; 

    public CustomView(Context context) { 
     super(context); 
     init(); 
    } 

    public CustomView(Context context, AttributeSet attrs) { 
     super(context, attrs); 
     init(); 
    } 

    public interface CustomViewListener { 
     void onEventComplete(); 
    } 

    public void setCustomViewListener(CustomViewListener listener) { 
     this.mListener = listener; 
    } 

    private void init() { 
     inflate(getContext(), R.layout.item_layout, this); 

     this.mLayout = (RelativeLayout) findViewById(R.id.layout); 
     this.mPicture = (ImageView) findViewById(R.id.picture); 

     mPicture.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       if (mListener != null) { 
        mListener.onEventComplete(); 
       } 
      } 
     }); 
    } 

} 

但由于某些原因,听者总是null,所以吨他实际上从未调用过onEventComplete()

为什么它总是空?

+0

给矿 – Noorul

回答

0

我认为你的自定义视图应该像下面那样,我不确定。但你可以尝试下面。

private void init() { 
View view=inflate(R.layout.item_layout, null); 
this.mLayout = (RelativeLayout)view. findViewById(R.id.layout); 
this.mPicture = (ImageView)view. findViewById(R.id.picture); 
this.mPicture.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View v) { 
     if (mListener != null) { 
      mListener.onEventComplete(); 
     } 
     } 
    }); 
    addView(view); 
} 

UPDATE

创建自定义视图命名customview xml文件,并给予尝试。

R.layout.customview

<com.yourpackage.customview 
    layout_height="match_parent" 
    layout_width="match_parent"/> 

而在你的适配器做以下onCreateViewHolder(...)方法

View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.customview, parent, false) 
return new MyViewHolder(view); 
+0

此的另一次尝试没有任何改变。 :/ – user7632571

相关问题