小编Ant*_*kov的帖子

在recyclerview中的notifydatachanged期间保持涟漪效应

我开始修改我的应用程序以支持棒棒糖.基本上,我有一个带有recyclerview的文件浏览器片段,当用户打开这个片段时,他会看到他的根目录下的所有文件夹,当用户点击我需要获取所有子文件夹+文件的文件夹并将其显示给用户使用与notifydatachanged相同的recyclerview.功能正常的问题是当用户单击文件夹时,在notifydatachanged期间不保留涟漪效应.

file_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/file_name"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="?attr/selectableItemBackground"
    android:clickable="true"
    android:drawablePadding="15dp"
    android:ellipsize="marquee"
    android:focusable="true"
    android:gravity="center_vertical"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:paddingLeft="14dip"
    android:paddingRight="15dip"
    android:textAppearance="?android:attr/textAppearanceLarge"
    android:textColor="?android:attr/textColorAlertDialogListItem" />
Run Code Online (Sandbox Code Playgroud)

Recyclerview适配器:

public class RecycleAdapter extends RecyclerView.Adapter<RecycleAdapter.CustomViewHolder>{

    private List<Item> _data;
    private Context _context;
    private IFileListener _listener;

    public RecycleAdapter(Context context, List<Item> data,IFileListener listener) {
        _data = data;
        _context = context;
        _listener = listener;
    }

    public void setData(List<Item> data)
    {
        _data = data;
        notifyDataSetChanged();
    }


    @Override
    public CustomViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View view = LayoutInflater.from(_context).inflate(R.layout.file_item, viewGroup,false);

        CustomViewHolder viewHolder = new CustomViewHolder(view);
        return …
Run Code Online (Sandbox Code Playgroud)

android ripple android-recyclerview

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

绑定数据android的通用形式

我最近开始学习 Kotlin 中的视图模型和数据绑定。我创建了一个示例项目,在其中我在一个活动中创建了多个片段。我很想知道如何使用视图模型实现具有数据绑定的通用片段。我不确定这是否可能,或者我是否走在正确的道路上。我在网上搜索并找到了一些线索,但没有完整的解决方案。

链接1

链接2

到目前为止我所做的我创建了一个抽象的 BaseFragment。

abstract class BaseFragment<V : BaseViewModel> : Fragment()
{

    lateinit var binding: FragmentHomeBinding

    lateinit var viewModel : V


    override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {

        binding = DataBindingUtil.inflate(inflater, getContentView(), container, false)
        val view = binding.root

        //here data must be an instance of the class MarsDataProvider
        viewModel = ViewModelProviders.of(this).get(viewModel.javaClass)

        setupUI()

        binding.viewModel = viewModel

        return view

    }

    abstract fun setupUI()

    abstract fun getContentView() : Int
}
Run Code Online (Sandbox Code Playgroud)

这是 HomeFragment 的代码

class HomeFragment : BaseFragment<HomeViewModel>() …
Run Code Online (Sandbox Code Playgroud)

data-binding android mvvm kotlin

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

使用支持片段时fragmentDispatchingAndroidInjector

我正在尝试使用支持v4片段创建一个简单的匕首2应用程序.修改我的应用程序后,我得到了这个奇怪的编译错误

Error:(35, 8) error: [dagger.android.AndroidInjector.inject(T)] java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> cannot be provided without an @Provides-annotated method.
java.util.Map<java.lang.Class<? extends android.support.v4.app.Fragment>,javax.inject.Provider<dagger.android.AndroidInjector.Factory<? extends android.support.v4.app.Fragment>>> is injected at
dagger.android.DispatchingAndroidInjector.<init>(injectorFactories)
dagger.android.DispatchingAndroidInjector<android.support.v4.app.Fragment> is injected at
app.series.com.tvshowsapplication.ui.main.MainActivity.fragmentDispatchingAndroidInjector
app.series.com.tvshowsapplication.ui.main.MainActivity is injected at
dagger.android.AndroidInjector.inject(arg0)
Run Code Online (Sandbox Code Playgroud)

快速搜索后,我找到了这个链接.它说我需要使用

事情是我不明白我应该把这部分放在哪里

@Multibinds
abstract Map<Class<? extends android.app.Fragment>, AndroidInjector.Factory<? extends android.app.Fragment>> bindNativeFragments();
Run Code Online (Sandbox Code Playgroud)

我的猜测我需要将它放在BaseActivity中,因为它是一个抽象函数,但我如何在主活动中实现它?

我的主要活动:

public class MainActivity extends BaseActivity<ActivityMainBinding, MainViewModel> implements MainNavigator, HasSupportFragmentInjector {

    @Inject
    ViewModelProvider.Factory mViewModelFactory;

    @Inject
    DispatchingAndroidInjector<Fragment> fragmentDispatchingAndroidInjector;

    private MainViewModel mMainViewModel;

    private DrawerLayout mDrawer;
    private Toolbar mToolbar;
    private NavigationView mNavigationView;
// …
Run Code Online (Sandbox Code Playgroud)

android fragment android-fragments dagger

4
推荐指数
1
解决办法
858
查看次数

Dagger 2注入两个改造对象

我在使用MVP时将Dagger 2与retrofit2库一起使用。一切顺利,直到我尝试集成另一个服务(基本上我试图将另一个改造对象初始化到另一个服务)。我遵循了这个答案,但是没有成功。

每次遇到错误时,我的每个片段和应用程序类似乎都无法识别组件类。

错误:找不到符号类DaggerApplicationComponent错误:找不到符号类DaggerEpisodeComponent

应用组件

@Singleton
@Component(modules = ApplicationModule.class)
public interface ApplicationComponent {

    Retrofit exposeStreamingRetrofit();

    Retrofit exposeRetrofit();

    Context exposeContext();

    AppPreferenceHelper exposePrefs();

}
Run Code Online (Sandbox Code Playgroud)

应用模块

   @Module
public class ApplicationModule
{
    private String mBaseUrl;
    private Context mContext;
    private AppPreferenceHelper mPrefsHelper;

    public ApplicationModule(Context context,String baseUrl)
    {
        mContext = context;
        mBaseUrl = baseUrl;
        mPrefsHelper = new AppPreferenceHelper(context, Consts.PREF_NAME);
    }


    @Singleton
    @Provides
    GsonConverterFactory provideGsonConverterFactory()
    {
        GsonConverterFactory gsonConverterFactory = GsonConverterFactory.create();
        return gsonConverterFactory;
    }

    @Singleton
    @Provides
    @Named("ok-1")
    OkHttpClient provideOkHttpClient()
    {

        HttpLoggingInterceptor logging = new HttpLoggingInterceptor(); …
Run Code Online (Sandbox Code Playgroud)

android dagger-2 retrofit2

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

Dagger 2 ViewModelProvider.Factory多次绑定

我正在尝试使用片段创建应用程序.我创建了一个测试片段(HomeFragment),它只有一个简单的TextView.我创建了所有必需的类(模块,模型和提供者).但我得到一个奇怪的并发症错误

Error:(25, 10) error: [dagger.android.AndroidInjector.inject(T)] android.arch.lifecycle.ViewModelProvider.Factory is bound multiple times:
@Provides android.arch.lifecycle.ViewModelProvider.Factory app.series.com.series3go.ui.main.MainActivityModule.mainViewModelProvider(app.series.com.series3go.ui.main.MainViewModel)
@Provides android.arch.lifecycle.ViewModelProvider.Factory app.series.com.series3go.ui.home.HomeFragmentModule.provideHomeFragmentViewModel(app.series.com.series3go.ui.home.HomeFragmentViewModel)
Run Code Online (Sandbox Code Playgroud)

HomeFragment

public class HomeFragment extends BaseFragment<HomeFragmentBinding, HomeFragmentViewModel> {

public static final String TAG = HomeFragment.class.getSimpleName();
@Inject
ViewModelProvider.Factory mViewModelFactory;


HomeFragmentBinding mHomeFragmentBinding;
private HomeFragmentViewModel mHomeFragmentViewModel;

public static HomeFragment newInstance() {
    Bundle args = new Bundle();
    HomeFragment fragment = new HomeFragment();
    fragment.setArguments(args);
    return fragment;
}

@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

@Override
public void onViewCreated(View view, @Nullable Bundle savedInstanceState) {
    super.onViewCreated(view, savedInstanceState);
    mHomeFragmentBinding = …
Run Code Online (Sandbox Code Playgroud)

java android dependency-injection dagger dagger-2

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