2017-04-14 124 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并调整其他参数以满足您的确切需求。

相关问题