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