2016-12-18 39 views
0

這裏是我的佈局xml.If relativelayout點擊作品也很好。沒有得到任何點擊事件,除了項目點擊。禁用項目點擊並啓用onclick recyclerview

 <RelativeLayout 
       android:id="@+id/layoutItems" 
       android:clickable="true" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_below="@+id/viewDivider"> 

       <android.support.v7.widget.RecyclerView 
        android:id="@+id/item_content" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content" 
        android:clickable="false" 
        android:padding="8dp"></android.support.v7.widget.RecyclerView> 

       </RelativeLayout> 

回答

1

有一些不同的方法來做到這一點。第一種方法是這樣做的:

RecyclerView recyclerView = findViewById(R.id.recycler); 
recyclerView.addOnItemTouchListener(
new RecyclerItemClickListener(context, recyclerView ,new RecyclerItemClickListener.OnItemClickListener() { 
    @Override public void onItemClick(View view, int position) { 
    // do whatever 
    } 

    @Override public void onLongItemClick(View view, int position) { 
    // do whatever 
    } 
}) 

);

或者你可以在ViewHolder中做到這一點。

  1. 我們需要一個監聽器接口。

    public interface OnItemClickListener { 
         public void onClick(View view, int position); 
         } 
    
  2. 在你的RecyclerView適配器您ViewHolder類中,實現View.OnClickListener,監聽綁定到視圖。在onClick方法中,調用接口OnItemClickListener的onClick方法。這應該從你的RecycyclerView的構造函數中傳入。 onclick事件的實際實現將來自包含此RecyclerView的活動或片段。這裏重要的一行是clickListener.onClick(view,getPosition()); clickListener是RecyclerView類中的全局變量,它也應該從您的RecyclerView的構造函數中傳入。

    public static class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { 
        public TextView cityName; 
        public ViewHolder(View view) { 
         super(view); 
         cityName = (TextView) view.findViewById(R.id.city_name); 
         itemView.setOnClickListener(this); // bind the listener 
        } 
        @Override 
        public void onClick(View view) { 
         clickListener.onClick(view, getPosition()); // call the onClick in the OnItemClickListener 
    

    } }

  3. 在活動類的onclick實施方式中,重要的線這裏是mAdapter.setClickListener(本);和onClick方法。 onClick方法從您的RecyclerView類的ViewHolder的onClick方法中觸發,該方法傳遞單擊項目的視圖和位置。

    public class CityActivity extends Activity implements ItemClickListener { 
    
        private RecyclerView mRecyclerView; 
        private CityAdapter mAdapter; 
        private List<City> cities; 
    
        @Override 
        protected void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.activity_city); 
        cities = CityManager.getInstance(this.getApplicationContext()).getCites(); 
        mRecyclerView = (RecyclerView)findViewById(R.id.list); 
        mRecyclerView.setLayoutManager(new LinearLayoutManager(this)); 
        mRecyclerView.setItemAnimator(new DefaultItemAnimator()); 
        mAdapter = new CityAdapter(cities, R.layout.row_city, this); 
        mRecyclerView.setAdapter(mAdapter); 
    
        mAdapter.setClickListener(this); // Bind the listener 
        } 
    
        @Override 
        public void onClick(View view, int position) { 
        // The onClick implementation of the RecyclerView item click 
        final City city = cities.get(position); 
         Intent i = new Intent(this, CityviewActivity.class); 
         i.putExtra("city", city.name); 
         i.putExtra("desc", city.description); 
         i.putExtra("image", city.imageName); 
         Log.i("hello", city.name); 
         startActivity(i); 
        } 
        } 
    
+0

請閱讀我不想對項目點擊的問題。我只需要Recyclerview或relativelayout的onclick – Sishin