2015-09-14 23 views
5

Đây là toàn bộ mã hoạt động của tôi, nếu tôi không thể đăng xml của mình.Không thể giải quyết phương thức setOnChildClickListener

public class Main_Activityextends AppCompatActivity { 
private RecyclerView recyclerview; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    recyclerview = (RecyclerView) findViewById(R.id.recyclerview); 
    recyclerview.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false)); 
    List<ExpandableListViewAdapter.Item> data = new ArrayList<>(); 

    data.add(new ExpandableListViewAdapter.Item(ExpandableListViewAdapter.HEADER, "Terms of usage")); 
    data.add(new ExpandableListViewAdapter.Item(ExpandableListViewAdapter.CHILD, "never eat")); 
    data.add(new ExpandableListViewAdapter.Item(ExpandableListViewAdapter.CHILD, "bluhhhhh")); 

    recyclerview.setAdapter(new ExpandableListViewAdapter(data)); 

    recyclerview.setOnChildClickListener(new ExpandableListView.OnChildClickListener() { 
     @Override 
     public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { 
      return true; 
     } 

    }); 

Mã này hoạt động một cách hoàn hảo mà không có sự clickListener, nhưng tôi muốn một hành động xảy ra khi nhấp vào một đứa trẻ nào đó của mảng nhưng ngay bây giờ nó nói Cannot resolve method setOnChildClickListener(anonymous android.widget.ExpendableListView.OnChildClickListener) mặc dù Các recycleViewAdapter tôi, bất kỳ trợ giúp sẽ được đánh giá cao

+0

Cố gắng thêm 'android: descendantFocusability = "blocksDescendants" 'trên childview của bạn –

+0

Vẫn kết quả tương tự –

+0

Bạn có Bánh mì nướng hoặc một cái gì đó để biết rằng nó không cháy? –

Trả lời

2

Nói một cách đơn giản, RecyclerView không hỗ trợ OnChildClickListener vì nó không được dự định là trực tiếp cho một thay thế cho ListView.

Đối với một lời giải thích rất tốt về việc tại sao, hãy kiểm tra this stackoverflow answer

Bạn nên thay vì thực hiện View.OnClickListener trong lớp ViewHolder bạn như vậy:

public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 

    // Your view fields here 

    public ViewHolder(View itemLayoutView) { 
     super(itemLayoutView); 

     // Assign view fields 

     itemLayoutView.setOnClickListener(this); 
    } 

    @Override 
    public void onClick(View v) { 
     // Do your thing here 
    } 
} 
+0

Tôi xin lỗi vì đã hỏi điều này muộn nhưng với lớp học của bạn bây giờ làm thế nào tôi có thể gọi một đứa trẻ cụ thể, bởi vì tôi đã không tìm thấy bất kỳ cách nào –

+0

Không biết những gì bạn có nghĩa là "gọi một đứa trẻ cụ thể", nhưng bạn có thể sử dụng ' getAdapterPosition() 'để tìm chỉ mục của khung nhìn đã được nhấp vào. –

Các vấn đề liên quan