gpt4 book ai didi

android - 使用 Dagger 2 发送数组列表

转载 作者:太空狗 更新时间:2023-10-29 14:53:29 26 4
gpt4 key购买 nike

我是 Android 依赖注入(inject)和 Dagger 2 库的新手。

首先,像我在下面所做的那样,使用 dagger 2 为我的自定义适配器设置列表是否是一个好习惯。

假设我有这个:

    package com.example.a3adel.vogellaexample;

import android.app.Activity;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import java.util.ArrayList;

import javax.inject.Inject;


public class ListAdapter extends BaseAdapter{
LayoutInflater inflater;
@Inject
ArrayList<String> listArray;
public ListAdapter(Activity context){
MyApplication app = (MyApplication) context.getApplication();

app.getComponent().inject(this);

inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return listArray.size();
}

@Override
public Object getItem(int position) {
return null;
}

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

@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view=inflater.inflate(R.layout.listitem,parent,false);

return view;
}
}

然后我在主要 Activity 中初始化数组列表,如下所示:

 @Provides
@Singleton
ArrayList<String> getList() {
ArrayList<String> list = new ArrayList<>();
list.add("test");
list.add("test2");
list.add("test3");
return list;
}

我的组件是这样的:

@Singleton
@Component(modules = {MainActivity.class})
public interface DiComponent {
void inject(ListAdapter adapter);

}

这是好的做法吗?有没有更好的方法可以做到这一点?

最佳答案

我认为向 android 提供者注入(inject)数据不是 DI 的好职责。

如果你有静态数组,你可以更简单地使用资源中的字符串数组 https://developer.android.com/guide/topics/resources/string-resource.html#StringArray .如果在运行时生成数组可能更好的方法是定义一些包含此数组生成逻辑的提供程序类并注入(inject)它们。

您可以选择使用@Qualifier http://docs.oracle.com/javaee/7/api/javax/inject/Qualifier.html分隔具有相同签名但不同含义的提供者。

关于android - 使用 Dagger 2 发送数组列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33391776/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com