2016-01-20 70 views
0

我需要一個自定義的relativeLayout,因爲我將在不同的列表視圖中多次使用它。無論哪種列表視圖,自定義的relativeLayout的點擊監聽器的意圖都是啓動一個活動。所以我在這個類中編寫了點擊監聽器,而不是在適配器中使用getView()。 我想添加點擊偵聽器到自定義的relativeLayout,並且將自定義的relativeLayout作爲一個項目添加到列表視圖中,但是當我單擊該項目時,偵聽器不起作用。 我該怎麼辦?請幫忙。如何添加點擊監聽器到自定義relativeLayout

自定義的RelativeLayout:

public class SearchCourseItem extends RelativeLayout { 

    @Bind(R.id.iv_search_course) 
    ImageView mIvSearchCourse; 
    @Bind(R.id.tv_search_course_title) 
    TextView mTvSearchCourseTitle; 
    @Bind(R.id.tv_search_course_detail) 
    TextView mTvSearchCourseDetail; 

    private SearchCourseEntity.DataEntity datas; 

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

    public void init(Context context) { 
     setDescendantFocusability(FOCUS_BLOCK_DESCENDANTS); 
     LayoutInflater.from(context).inflate(R.layout.item_search_course, this); 
     ButterKnife.bind(this); 
    } 

    public void setData(SearchCourseEntity.DataEntity datas) { 
     this.datas = datas; 
     mTvSearchCourseDetail.setText(datas.getDescription()); 
     mTvSearchCourseTitle.setText(datas.getName()); 
     ImageLoader.getInstance().displayImage(datas.getPicture(), mIvSearchCourse, UILHelper.getMediumPlaceHolderBaseBuilder().build()); 
    } 

    @Override 
    public void setOnClickListener(OnClickListener l) { 
     Intent intent = new Intent(); 
     if (datas.getType().equals("workout")) { 
      intent.setClass(getContext(), DailyTrainActivity.class); 
      intent.putExtra("workoutid", datas.getId()); 
     } else { 
      intent.setClass(getContext(), PlanActivity.class); 
      intent.putExtra("planid", datas.getId()); 
     } 
     getContext().startActivity(intent); 
    } 
} 

適配器:

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     SearchCourseItem searchCourseItem; 
     if (convertView != null && convertView instanceof SearchCourseItem) { 
      searchCourseItem = (SearchCourseItem) convertView; 
     } else { 
      searchCourseItem = new SearchCourseItem(mContext); 
     } 
     searchCourseItem.setData(mDataEntities.get(position)); 
     return searchCourseItem; 
    } 
+0

試圖通過添加監聽到你的convertView getView方法內部 – DadoZolic

+0

要調用它,並通過一個傾聽者的首要'setOnClickListener'代替。我想這就是爲什麼沒有觸發點擊。 – AlbAtNf

+0

您能否描述爲什麼您需要自定義RelativeLayout? – hardartcore

回答

1

不要覆蓋

public void setOnClickListener(OnClickListener l) 

代碼移動到onClickListener並設置它在你的getView( )。

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    SearchCourseItem searchCourseItem; 
    if (convertView != null && convertView instanceof SearchCourseItem) { 
     searchCourseItem = (SearchCourseItem) convertView; 
    } else { 
     searchCourseItem = new SearchCourseItem(mContext); 
    } 
    searchCourseItem.setData(mDataEntities.get(position)); 
searchCourseItem.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent intent = new Intent(); 
      if (searchCourseItem.getData().getType().equals("workout")) { //Don't know, if that is what you want!!! 
       intent.setClass(getContext(), DailyTrainActivity.class); 
       intent.putExtra("workoutid", datas.getId()); 
      } else { 
       intent.setClass(getContext(), PlanActivity.class); 
       intent.putExtra("planid", datas.getId()); 
      } 
      getContext().startActivity(intent); 
     } 
    }); 

    return searchCourseItem; 
} 

編輯:替代方案你可以在構造函數中設置onClickListener。仍然不需要重寫setOnClickListener。

public SearchCourseItem(Context context) { 
    super(context); 
    init(context); 
    super.setOnClickListener(...); 
} 
+0

我會多次使用自定義的relativeLayout,並且在不同的listview和不同的適配器中,所以我想在自定義的relativeLayout中編寫代碼。 – zhangkaiyue

+0

您也可以在佈局的構造函數中設置偵聽器。查看我的編輯。 – AlbAtNf

+0

謝謝你! – zhangkaiyue

1
Try onclick listener to your convertView 

Code: 

yourview.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       //Do something 
      } 
     }); 

return yourview; 
1

我做的東西,看起來像你做什麼,但在RecyclerView.Adapter,與我的自定義視圖的構造充氣list_item.xml到每個新的實例。然後在我的適配器中,我使用onBindViewHolder()方法附加了我的聽衆。但是,即使在理論上它似乎做了正確的方式,它沒有工作,直到我從list_item.xml的根佈局刪除android:clickable="true"屬性。

相關問題