自定义视图RatingBar已调用setOnTouchListener,但不会覆盖performClick

时间:2017-10-26 10:04:45

标签: android android-studio ratingbar

我在我的布局中使用了RatingBar,就像下面的1星一样 -

<RatingBar
            android:id="@+id/ratingBar"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_below="@id/textViewReleaseDate"
            android:layout_marginLeft="16dp"
            android:layout_marginTop="16dp"
            android:layout_toRightOf="@id/imageViewPoster"
            android:numStars="1"
            android:stepSize="1.0" />

在我的活动中有setOnTouchListener,如下所示 -

ratingBar.setOnTouchListener(new View.OnTouchListener() {

        int ratingAtActionDown;

        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {

            if (motionEvent.getAction() == MotionEvent.ACTION_DOWN)
                ratingAtActionDown = (int) ratingBar.getRating();
            else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
                ratingBar.setRating(ratingAtActionDown == 0 ? 1 : 0);
            }

            return true;
        }
    });

对于上面的代码片段,我收到了此警告 -

  

自定义视图'RatingBar'已调用setOnTouchListener,但未覆盖performClick

enter image description here

Android Studio 2.3.3 ratingBar.setOnTouchListener未生成警告但在升级到 Android Studio 3.0稳定后,它开始警告。

如何摆脱警告?

1 个答案:

答案 0 :(得分:2)

Lint似乎错误地认为任何未实现performClick()方法的视图都是自定义视图。知道了这一点,我们可以猜测受此警告影响的观点实际上是缺少该实现。

现在回答您的问题,如果您希望警告消失,您可能需要扩展您想要设置onTouchListener的视图:

TouchableRatingBar ratingBar = (TouchableRatingBar)(RatingBar)findViewById(R.id.ratingBar);

覆盖<yourcompany.yourproject.TouchableRatingBar android:id="@+id/ratingBar" android:layout_width="50dp" android:layout_height="50dp" android:layout_below="@id/textViewReleaseDate" android:layout_marginLeft="16dp" android:layout_marginTop="16dp" android:layout_toRightOf="@id/imageViewPoster" android:numStars="1" android:stepSize="1.0" /> 方法,你应该好好去。

请注意,我使用了AppCompatRatingBar,因为Lint似乎不喜欢这样做。

您可能还需要双重评分栏或在布局中更改其类型。

Double Cast:

$subjects = $this->subject_m->get_subject_call($class);
$csv_array = array();
$csv_array_first_row = array('roll','section','exam type');
foreach ($subjects as $key => $value) {
    $csv_array_first_row[] = $value->subject;
}
$csv_array_first_row[] = "total";
$csv_array_first_row[] = "maximum marks";
$csv_array_first_row[] = "grades";
$csv_array_first_row[] = "points";
$csv_array_first_row[] = "rank";
$csv_array[] = $csv_array_first_row;
array_to_csv($csv_array,'ttt.csv');

我不会亲自使用双重演员,但是如果您需要替代简单地更改布局中的类型,它可能会完成任务。

类型更改:

roll    section name    examtype    english maths   social  science gk  total   max marks   grades  points  rank