小编Som*_*mar的帖子

RecyclerView 适配器类中 Android 视图绑定的正确方法是什么?

这是我在RecycleView适配器类中使用的代码。我不知道这是使用视图绑定的正确方法还是不正确。如果您有更好的解决方案,请回答我。谢谢你。

@Override
public CategoryAdapter.MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {

    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.common_circle_image, parent, false);

    return new MyViewHolder(itemView);
}

@Override
public void onBindViewHolder(@NonNull CategoryAdapter.MyViewHolder holder, final int position) {
    holder.binding.img.setBackgroundResource(addAdapterData.get(position).getItemUrl());
    holder.binding.txt.setText(addAdapterData.get(position).getItemName());
}

@Override
public int getItemCount() {
    return addAdapterData.size();
}

public class MyViewHolder extends RecyclerView.ViewHolder {

    CommonCircleImageBinding binding;

    public MyViewHolder(@NonNull View itemView) {
        super(itemView);
        binding = CommonCircleImageBinding.bind(itemView);
        binding.cardView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                commonItemClick.onItemClick(getAdapterPosition(),"");
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

另外,我想知道在同一个班级使用R.layout.layout_name和使用是否正确ViewBinding

java android android-recyclerview android-viewbinding

20
推荐指数
3
解决办法
1万
查看次数

如何在Android中使用视图绑定

我一直在使用findViewById然后使用ButterKnife 来绑定视图。最近,我看到了这篇文章:https : //proandroiddev.com/new-in-android-viewbindings-the-difference-from-databinding-library-bef5945baf5e,我不太确定如何使用它。

我尝试这样做,但它似乎在 Android Studio 3.4.2 中不起作用

val binding = MainActivityBinding.inflate(layoutInflater) setContentView(binding.root)

然后使用这些值,例如:

binding.button....

binding.textView....

android findviewbyid android-viewbinding

19
推荐指数
6
解决办法
2万
查看次数

如何从包含合并标记的布局访问视图包含在另一个布局中?

我使用 Android Studio 3.6-RC1 和构建工具版本 3.6.0-rc01 并遇到了 ViewBinding 功能的问题:

我有带有以下标记的 activity_test.xml 文件:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include
        android:id="@+id/view_merged"
        layout="@layout/merge_view" />
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

和 merge_view.xml 带有以下标记:

<merge xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/label"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Merge view" />
</merge>
Run Code Online (Sandbox Code Playgroud)

活动代码如下所示:

class TestActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityTestBinding.inflate(layoutInflater)
        setContentView(binding.root)

        binding.viewMerged.label.text = "New text"

    }
}
Run Code Online (Sandbox Code Playgroud)

问题是当我尝试从合并布局访问 TextView 时,应用程序抛出异常并显示消息 java.lang.NullPointerException: Missing required view with ID: viewMerged.

生成的绑定类如下所示:

public final class ActivityTestBinding implements ViewBinding {
  @NonNull
  private final …
Run Code Online (Sandbox Code Playgroud)

android android-viewbinding

13
推荐指数
1
解决办法
4157
查看次数

即使在运行时请求权限后,也会出现误报lint权限错误

我很难理解android使用的运行时权限方法.对于那些正在阅读本文的人,我不是在这里问"如何调用运行时权限"..如果尚未授予权限对话框,我可以显示权限对话框,甚至可以在片段中获取onRequestPermissionsResult().

用这个代码

 if (ContextCompat.checkSelfPermission(mActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
        FragmentCompat.requestPermissions(this,new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, RQ_GET_LOCATION);
        Log.e("permission", "asking permission");
        return;
    }
   Log.e("permission", "permission already granted");
   accessLocation();
Run Code Online (Sandbox Code Playgroud)

获得结果 onRequestPermissionsResult

 @Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults)
{
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode) {
        case RQ_GET_LOCATION:
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                Log.e("permission", "onRequestPermissionsResult : permission granted, access location here");
                accessLocation();
            }
            else {
                Log.e("permission", "onRequestPermissionsResult : permission denied");
            }
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

里面的代码accessLocation()

 private void accessLocation()
{
    Log.e("permission", "accessing location permission"); …
Run Code Online (Sandbox Code Playgroud)

java android android-permissions

8
推荐指数
1
解决办法
607
查看次数

以编程方式添加约束

在具有约束布局的布局定义中使用的以下XML指令的java代码的转换是什么?

app:layout_constraintBottom_toBottomOf="@+id/Button1"
app:layout_constraintTop_toTopOf="@+id/Button1"
app:layout_constraintLeft_toLeftOf="@+id/Button2"
app:layout_constraintRight_toRightOf="Button2"
Run Code Online (Sandbox Code Playgroud)

android android-layout android-constraintlayout

8
推荐指数
1
解决办法
5015
查看次数

startService()抛出java.lang.IllegalStateException

onCreate()我的活动,

我试图通过以下代码启动服务:

Intent intent = new Intent();
intent.setClassName(SERVICE_PKG_NAME, SERVICE_NAME);
context.startService(intent); //context = MainActivity.this
Run Code Online (Sandbox Code Playgroud)

但是,我收到以下异常:

java.lang.IllegalStateException:不允许启动服务Intent(service-name):app在后台

知道这可能是什么原因吗?现在坚持几个小时.

android android-service android-8.0-oreo

7
推荐指数
1
解决办法
4507
查看次数

RecyclerView 分页时跳转到列表中间

我有这个页面,我已经使用 MVVM 和分页进行了设置RecyclerView,并使用Pull 刷新。单击此中的某些项目RecyclerView将导航到另一个片段。

我的问题是每当我第一次加载页面并完全向下滚动时。拉动刷新也可以。

但是当我导航到另一个片段并返回时,一直滚动到顶部,滑动以刷新:RecyclerView将跳转到页面中间(就在我单击以导航到另一个片段的项目上)

我的片段

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)
        val adapter = GroupAdapter<ViewHolder>().apply { add(mainSection) }
        val gridLayoutManager = GridLayoutManager(activity, adapter.spanCount)
        gridLayoutManager.spanSizeLookup = adapter.spanSizeLookup
        with(recyclerView) {
            layoutManager = gridLayoutManager
            setHasFixedSize(true)
            addOnScrollListener(PaginationScrollListener {
                viewModel.onEndOfList()
            })
        }
        recyclerView.adapter = adapter


        pullToRefresh.apply {
            setProgressBackgroundColorSchemeColor(
                ContextCompat.getColor(context, R.color.window_level_2)
            )
            setColorSchemeColors(ContextCompat.getColor(context, R.color.brand_primary))
            setOnRefreshListener { viewModel.onRefresh() }
        }
    }
Run Code Online (Sandbox Code Playgroud)

我的视图模型

    fun onRefresh() {
        page = 0
        widgetItems.clear()
        _widgetListObservable.postValue(widgetItems)
        finishedLoading = false
        isFirstFetch = true …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-recyclerview android-paging

5
推荐指数
1
解决办法
1186
查看次数

我是否需要清除/清空自定义视图中的视图绑定字段?

我已经开始在我的片段和活动中使用视图绑定。片段的推荐模式是中的null绑定字段onDestroyView()。我还在自定义视图中使用视图绑定。我是否还需要清除该视图绑定字段?我想是这样,但没有onDestroyed()视图功能。有一个View.onDetachedFromWindow()函数,但我不确定这是否是null绑定字段的合适位置。

这是一个合理的担忧吗?如果是,我该如何实现呢?

android android-viewbinding

5
推荐指数
1
解决办法
1464
查看次数

3
推荐指数
1
解决办法
731
查看次数

如何通过 ViewModel 从 Fragment 观察 Repository LiveData

我很难弄清楚如何在请求的情况下连接我的RepositoryViewModel的实时数据@GET并在片段中观察它们。

当请求类型是@POST因为我可以Transformation.switchMap在主体上使用时,我没有这个问题,并且每当主体更改存储库的函数被调用并向响应实时数据发出值时,就像这样

val matchSetsDetail: LiveData<Resource<MatchDetailBean>> = Transformations.switchMap(matchIdLiveData) { matchId ->
        val body = MatchSetRequest(matchId)
        repository.getMatchSet(body)
    }
Run Code Online (Sandbox Code Playgroud)

但是在@GET请求的情况下,我的视图提供了几个查询参数

我在存储库类中有这个改造 API 调用,代码看起来像这样

class Repository {
    fun checkInCheckOutUser(apiKey: String, userId: Int, status: String, latitude: Double, longitude: Double, checkedOn: Long): LiveData<Resource<BaseResponse>> = liveData {
            emit(Resource.Loading())
            try {
                val response: Response<BaseResponse> = ApiClient.coachApi.checkInCheckOutUser(apiKey, userId, status, latitude, longitude, checkedOn)
                if (response.isSuccessful && response.body() != null) {
                    if (response.body()!!.isValidKey && response.body()!!.success) {
                        emit(Resource.Success(response.body()!!))
                    } else …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-livedata android-architecture-components kotlin-coroutines

2
推荐指数
1
解决办法
2073
查看次数

片段中函数的不可达语句

我现在有一个要在其中显示地图的Fragment,但现在我这样做了,但是当我调用一个函数时,它抛出了我无法到达的错误。

public class HomeFragment extends Fragment {
 private static final String TAG = "HomeFragment";
 private static final String FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION;
 private static final String COARSE_LOCATION = Manifest.permission.ACCESS_COARSE_LOCATION;

 //vars

 private Boolean mLocationPermissionsGranted = false;
 private static final int LOCATION_PERMISSION_REQUEST_CODE = 1234;
 private GoogleMap mMap;

 @Nullable
 @Override
 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
  return inflater.inflate(R.layout.layout_home, container, false);
  getLocationPermision();
 }


 private void initMap() {
  SupportMapFragment mapFragment = (SupportMapFragment) getFragmentManager().findFragmentById(R.id.map);
  mapFragment.getMapAsync(new OnMapReadyCallback() {
   @Override
   public void onMapReady(GoogleMap …
Run Code Online (Sandbox Code Playgroud)

java android

0
推荐指数
1
解决办法
40
查看次数