2017-04-14 68 views
1

我使用下面的CoverFlow庫:https://github.com/moondroid/CoverFlow按鈕膨脹的FrameLayout不觸發點擊事件

每個蓋有其自身的FrameLayout。我添加到framelayout的按鈕不會執行onClick事件。具體而言,我已將一個onClick事件添加到應用按鈕,但是當單擊評級標籤時單擊該按鈕時不會執行onClick事件,而不會在單擊該按鈕時執行onClick事件。 coverflow with framelayout 我假設佈局在某種意義上被混淆了。我嘗試了多個解決方案,但沒有成功。

當充氣佈局我通過父視圖,並設置attachToRoot參數爲false:

LayoutInflater inflater = (LayoutInflater) mContext. 
       getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     rowView = inflater.inflate(R.layout.item_coverflow, parent, false); 

請參閱下面的詳細的代碼。爲清楚起見,用於說明的按鈕具有編號buttonApply in item_coverflow.xml並且其onClick監聽器被分配在CoverFlowAdapter.java中。幫助將不勝感激。謝謝。

我已添加的自定義的CoverFlow元件到的RelativeLayout:

<?xml version="1.0" encoding="utf-8"?> 

    <RelativeLayout 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:id="@+id/activity_register" 
     android:layout_gravity="center" 
     android:paddingBottom="@dimen/activity_vertical_margin" 
     android:paddingLeft="@dimen/activity_horizontal_margin" 
     android:paddingRight="@dimen/activity_horizontal_margin" 
     android:paddingTop="@dimen/activity_vertical_margin" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     xmlns:coverflow="http://schemas.android.com/apk/res-auto" 
     tools:context="za.co.xxx.xxx.VacancyActivity"> 

    <it.moondroid.coverflow.components.ui.containers.FeatureCoverFlow 
     android:id="@+id/coverFlow" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     coverflow:coverHeight="@dimen/cover_height" 
     coverflow:coverWidth="@dimen/cover_width" 
     coverflow:maxScaleFactor="1.5" 
     coverflow:reflectionGap="0px" 
     coverflow:rotationThreshold="0.5" 
     coverflow:scalingThreshold="0.5" 
     coverflow:spacing="0.6" /> 
    </RelativeLayout> 

的CoverFlow的使用framelayouts在的CoverFlow,其中我與ID buttonApply加入相關的按鈕具體按鈕的每個視圖的話分析:

<?xml version="1.0" encoding="utf-8"?> 
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="@dimen/cover_width" 
    android:layout_height="@dimen/cover_height" 
    android:background="@color/black_transparent"> 

    <TableLayout 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:padding="10dp" 
     android:stretchColumns="0,1"> 
     <TableRow> 
      <TextView 
       android:id="@+id/textViewPracticeNameLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewPracticeName" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewEmploymentTypeLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewEmploymentType" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewVacancyTypeLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewVacancyType" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewAddressLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewAddress" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewRatePerHourLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewRatePerHour" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewStartDateLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewStartDate" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewEndDateLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewEndDate" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewDistanceTravelLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewDistanceTravel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewTimeToTravelLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewTimeToTravel" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <TextView 
       android:id="@+id/textViewRatingLbl" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/white" 
       android:layout_column="0" 
       android:maxLines="4"/> 

      <TextView 
       android:id="@+id/textViewRating" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/not_available" 
       android:textColor="@color/white" 
       android:layout_column="1" 
       android:maxLines="4"/> 
     </TableRow> 

     <TableRow> 
      <Button 
       android:id="@+id/buttonViewProfileVideo" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/colorPrimary" 
       android:layout_span="2" 
       android:background="@color/transparent" /> 
     </TableRow> 

     <TableRow> 
      <Button 
       android:id="@+id/buttonViewMoreDetails" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/colorPrimary" 
       android:layout_span="2" 
       android:background="@color/transparent" /> 
     </TableRow> 

     <TableRow> 
      <Button 
       android:id="@+id/buttonApply" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:padding="2dp" 
       android:textSize="@dimen/small_text_size" 
       tools:text="@string/practice" 
       android:textColor="@color/bright_green" 
       android:layout_span="2" 
       android:background="@color/transparent" 
       android:clickable="true"/> 
     </TableRow> 

    </TableLayout> 

</FrameLayout> 

的CoverFlow的是這裏的初始化:

public class VacancyActivity extends AppCompatActivity { 

    private FeatureCoverFlow coverFlow; 
    private CoverFlowAdapter coverFlowAdapter; 
    private ArrayList<VacancyEntity> mData = new ArrayList<>(0); 

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

    private void setup() { 

     mData.add(new VacancyEntity(
       R.string.practice, "ABC Inc", 
       R.string.employment_type, "asldkjhf", 
       R.string.vacancy_type, "sdkfaslkdjf", 
       R.string.address, "asdfasdf", 
       R.string.rate_per_hour, "asdfasdf", 
       R.string.start_date, "asdkfdf", 
       R.string.end_date, "asdfasdf", 
       R.string.distance_to_travel, "sdkfjslkdjf", 
       R.string.time_to_travel, "asdfasdf", 
       R.string.rating, "asdlkfj", 
       R.string.view_practice_profile_video, 
       R.string.view_more_details, 
       R.string.apply)); 

     coverFlowAdapter = new CoverFlowAdapter(this); 
     coverFlowAdapter.setData(mData); 
     coverFlow = (FeatureCoverFlow) findViewById(R.id.coverFlow); 
     coverFlow.setAdapter(coverFlowAdapter); 
    } 
} 

在佈局膨脹的自定義適配器:

public class CoverFlowAdapter extends BaseAdapter { 
    private ArrayList<VacancyEntity> mData = new ArrayList<>(0); 
    private Context mContext; 

    public CoverFlowAdapter(Context context) { 
     mContext = context; 
    } 

     public void setData(ArrayList<VacancyEntity> data) { 
     mData = data; 
    } 

    @Override 
    public int getCount() { 
     return mData.size(); 
    } 

    @Override 
    public Object getItem(int pos) { 
     return mData.get(pos); 
    } 

    @Override 
    public long getItemId(int pos) { 
     return pos; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View rowView = convertView; 

     if (rowView == null) { 

      LayoutInflater inflater = (LayoutInflater) mContext. 
        getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      rowView = inflater.inflate(R.layout.item_coverflow, parent, false); 

      ViewHolder viewHolder = new ViewHolder(); 
      viewHolder.textViewPracticeNameLbl = (TextView) 
        rowView.findViewById(R.id.textViewPracticeNameLbl); 
      viewHolder.textViewPracticeName = 
        (TextView) rowView.findViewById(R.id.textViewPracticeName); 
      viewHolder.textViewEmploymentTypeLbl = 
        (TextView) rowView.findViewById(R.id.textViewEmploymentTypeLbl); 
      viewHolder.textViewEmploymentType = 
        (TextView) rowView.findViewById(R.id.textViewEmploymentType); 
      viewHolder.textViewVacancyTypeLbl = 
        (TextView) rowView.findViewById(R.id.textViewVacancyTypeLbl); 
      viewHolder.textViewVacancyType = 
        (TextView) rowView.findViewById(R.id.textViewVacancyType); 
      viewHolder.textViewAddressLbl = 
        (TextView) rowView.findViewById(R.id.textViewAddressLbl); 
      viewHolder.textViewAddress = 
        (TextView) rowView.findViewById(R.id.textViewAddress); 
      viewHolder.textViewRatePerHourLbl = (TextView) rowView.findViewById(R.id.textViewRatePerHourLbl); 
      viewHolder.textViewRatePerHour = 
        (TextView) rowView.findViewById(R.id.textViewRatePerHour); 
      viewHolder.textViewStartDateLbl = 
        (TextView) rowView.findViewById(R.id.textViewStartDateLbl); 
      viewHolder.textViewStartDate = 
        (TextView) rowView.findViewById(R.id.textViewStartDate); 
      viewHolder.textViewEndDateLbl = 
        (TextView) rowView.findViewById(R.id.textViewEndDateLbl); 
      viewHolder.textViewEndDate = 
        (TextView) rowView.findViewById(R.id.textViewEndDate); 
      viewHolder.textViewDistanceToTravelLbl = 
        (TextView) rowView.findViewById(R.id.textViewDistanceTravelLbl); 
      viewHolder.textViewDistanceToTravel = 
        (TextView) rowView.findViewById(R.id.textViewDistanceTravel); 
      viewHolder.textViewTimeToTravelLbl = 
        (TextView) rowView.findViewById(R.id.textViewTimeToTravelLbl); 
      viewHolder.textViewTimeToTravel = 
        (TextView) rowView.findViewById(R.id.textViewTimeToTravel); 
      viewHolder.textViewRatingLbl = 
        (TextView) rowView.findViewById(R.id.textViewRatingLbl); 
      viewHolder.textViewRating = 
        (TextView) rowView.findViewById(R.id.textViewRating); 
      viewHolder.buttonViewProfileVideo = 
        (Button) rowView.findViewById(R.id.buttonViewProfileVideo); 
      viewHolder.buttonViewMoreDetails = 
        (Button) rowView.findViewById(R.id.buttonViewMoreDetails); 
      viewHolder.buttonApply = 
        (Button) rowView.findViewById(R.id.buttonApply); 
      viewHolder.buttonApply.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        Toast.makeText(view.getContext(), "hello", Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      rowView.setTag(viewHolder); 
     } 

     ViewHolder holder = (ViewHolder) rowView.getTag(); 

     holder.textViewPracticeNameLbl.setText(mData.get(position).practiceLblId); 
     holder.textViewPracticeName.setText(mData.get(position).practiceData); 
     holder.textViewEmploymentTypeLbl.setText(mData.get(position).employmentTypeLblId); 
     holder.textViewEmploymentType.setText(mData.get(position).employmentTypeData); 
     holder.textViewVacancyTypeLbl.setText(mData.get(position).vacancyTypeLblId); 
     holder.textViewVacancyType.setText(mData.get(position).vacancyTypeData); 
     holder.textViewAddressLbl.setText(mData.get(position).addressLblId); 
     holder.textViewAddress.setText(mData.get(position).addressData); 
     holder.textViewRatePerHourLbl.setText(mData.get(position).ratePerHourLblId); 
     holder.textViewRatePerHour.setText(mData.get(position).ratePerHourData); 
     holder.textViewStartDateLbl.setText(mData.get(position).startDateLblId); 
     holder.textViewStartDate.setText(mData.get(position).startDateData); 
     holder.textViewEndDateLbl.setText(mData.get(position).endDateLblId); 
     holder.textViewEndDate.setText(mData.get(position).endDateData); 
     holder.textViewDistanceToTravelLbl.setText(mData.get(position).distanceToTravelLblId); 
     holder.textViewDistanceToTravel.setText(mData.get(position).distanceToTravelData); 
     holder.textViewTimeToTravelLbl.setText(mData.get(position).timeToTravelLblId); 
     holder.textViewTimeToTravel.setText(mData.get(position).timeToTravelData); 
     holder.textViewRatingLbl.setText(mData.get(position).ratingLblId); 
     holder.textViewRating.setText(mData.get(position).ratingData); 
     holder.buttonViewProfileVideo.setText(mData.get(position).viewPracticeProfileVideoLblId); 
     holder.buttonViewMoreDetails.setText(mData.get(position).viewMoreDetailsLblId); 
     holder.buttonApply.setText(mData.get(position).applyLblId); 

     return rowView; 
    } 


    private static class ViewHolder { 
     private TextView textViewPracticeNameLbl; 
     private TextView textViewPracticeName; 
     private TextView textViewEmploymentTypeLbl; 
     private TextView textViewEmploymentType; 
     private TextView textViewVacancyTypeLbl; 
     private TextView textViewVacancyType; 
     private TextView textViewAddressLbl; 
     private TextView textViewAddress; 
     private TextView textViewRatePerHourLbl; 
     private TextView textViewRatePerHour; 
     private TextView textViewStartDateLbl; 
     private TextView textViewStartDate; 
     private TextView textViewEndDateLbl; 
     private TextView textViewEndDate; 
     private TextView textViewDistanceToTravelLbl; 
     private TextView textViewDistanceToTravel; 
     private TextView textViewTimeToTravelLbl; 
     private TextView textViewTimeToTravel; 
     private TextView textViewRatingLbl; 
     private TextView textViewRating; 
     private Button buttonViewProfileVideo; 
     private Button buttonViewMoreDetails; 
     private Button buttonApply; 
    } 
} 
+0

首先我懷疑'CoverFlow'。也許這是由於庫中的縮放過程造成的。嘗試在Android Studio中使用LayoutInspector工具來檢查「Button」的點擊框是否沒有移動到「rating」標籤的位置。 –

+0

@BartekLipinski,謝謝。我已經跑了檢查員,確實點擊框正在移出位置。 –

回答

0

好了,從意見的問題,以便繼續:

我不是很熟悉的圖書館,所以我要告訴你想要發生的事情以及如何嘗試克服這個問題:

該庫可能會將當前頁面縮放到maxScaleFactor(使用scaleXscaleY參數)。其結果是Views(包括您的點擊框)的實際位置與屏幕上的外觀相反。

我建議您嘗試設置maxScaleFactor1.0f並調整其他參數以滿足您的確切需求。