반응형
Android Data Binding이 인수를 onClick 메서드에 전달합니다.
사용자 지정 인수를 다음으로 전달할 수 있습니까?onClick
데이터 바인딩 라이브러리를 사용하는 방법?onClickListener를 사용해야 하는 레이아웃 xml 파일이 있습니다.
<?xml version="1.0" encoding="utf-8"?>
<layout ...>
<data>
<variable
name="viewModel"
type="com.productivity.tiktak.ui.tracker.viewModel.CategoryViewModel"/>
<variable
name="callback"
type="com.productivity.tiktak.ui.tracker.TrackerAdapter"/>
</data>
<android.support.v7.widget.CardView
android:onClick="@{callback.onCategoryClick(viewModel)}"
...
android:layout_width="match_parent"
android:layout_height="wrap_content">
<!-- ... Some stuff -->
</android.support.v7.widget.CardView>
</layout>
여기 클릭 핸들러 코드가 있어요
public void onCategoryClick(View view, CategoryViewModel categoryViewModel)
{
//handler code...
}
내 CategoryViewModel 개체를 xml에서 클릭 핸들러로 전달할 수 있습니까?
람다 식을 사용하고 뷰를 모수로 전달할 수 있습니다.
android:onClick="@{() -> callback.onCategoryClick(viewModel)}"
뷰가 필요한 경우 다음 기능을 통해 뷰를 전달할 수 있습니다.
android:onClick="@{(view) -> callback.onCategoryClick(view, viewModel)}"
다중 방식:
솔루션 1 (발표자가 있을 경우)
아래와 같은 발표자 또는 핸들러 클래스가 있습니다.
public class Presenter {
public void onSaveClick(View view, Task task){}
}
이제 변수 유형을 사용합니다.Presenter
당신의 배치에.클릭을 아래와 같이 설정합니다.
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="task" type="com.android.example.Task" />
<variable name="presenter" type="com.android.example.Presenter" />
</data>
<LinearLayout ...>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{(view) -> presenter.onSaveClick(view, task)}"
/>
</LinearLayout>
</layout>
여기에 인수를 더 추가할 수 있습니다.
이 데이터 변수는 다음에서 설정해야 합니다.onCreate()
방법.아래와 같이
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setTask(task);
binding.setPresenter(presenter);
해결책 2 (발표자가 없을 때)
활동/프래그먼트의 변수 유형 만들기
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<data>
<variable name="task" type="com.android.example.Task" />
<variable name="activity" type="com.example.MainActivity" />
</data>
<LinearLayout ...>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="@{(view) -> activity.onSaveClick(view, task)}"
/>
</LinearLayout>
</layout>
바인딩 레이아웃에서 호출할 메소드를 생성합니다.그리고 잊지 말고 전화해요. setActivity(YourActivity.this)
액티비티에서.
public class MainActivity extends AppCompatActivity {
public void onSaveClick(View view, Task task) {
System.out.println("MainActivity.onSaveClick");
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ActivityMainBinding binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
binding.setActivity(this);
binding.setTask(task);
}
}
Android DataBinding 설명서 자세히 보기
클릭을 설정하는 방법에는 여러 가지가 있습니다. 이 답변을 확인해 보세요.
언급URL : https://stackoverflow.com/questions/37105066/android-data-binding-pass-arguments-to-onclick-method
반응형
'programing' 카테고리의 다른 글
size_t 유형의 변수에 대한 교차 플랫폼 형식 문자열? (0) | 2023.09.15 |
---|---|
비트 조작 모범 사례 (0) | 2023.09.15 |
큰 요청에 대해 응답 헤더를 업스트림에서 읽는 동안 Nginx 업스트림이 너무 일찍 닫혔습니다. (0) | 2023.09.15 |
MySQL: sql_mode 영구 설정 (0) | 2023.09.15 |
스키마의 조건부/실행 가능한 주석입니다.sql in Spring Boot 응용 프로그램 (0) | 2023.09.15 |