我正在尝试使用Architecture Components,我想为RecyclerView的每个项目构建一个ViewModel.我不确定这是否正式正确或我应该坚持"旧方式".
我有这个适配器:
public class PostAdapter extends RecyclerView.Adapter<PostAdapter.PostViewHolder> {
private List<Post> list;
public static class PostViewHolder extends RecyclerView.ViewHolder{
final ItemPostBinding binding;
public PostViewHolder(ItemPostBinding binding){
super(binding.getRoot());
this.binding = binding;
}
}
@Override
public PostViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ItemPostBinding binding = DataBindingUtil
.inflate(LayoutInflater.from(parent.getContext()), R.layout.item_post,
parent, false);
return new PostViewHolder(binding, parent.getContext());
}
@Override
public void onBindViewHolder(PostViewHolder holder, int position) {
holder.binding.setPost(list.get(position));
holder.binding.executePendingBindings();
}
@Override
public int getItemCount() {
return list == null ? 0 : list.size();
}
public void setList(List<Post> list){ …Run Code Online (Sandbox Code Playgroud) android mvvm android-recyclerview android-architecture-components
我正在开发一个应用程序,我想change the textcolor of the actionbar title.现在,我在清单中定义了一个主题:
<application
android:theme="@style/AppTheme">
</application>
Run Code Online (Sandbox Code Playgroud)
在styles.xml中定义:
<style name="AppTheme" parent="android:style/Theme.Holo.Light">
<item name="android:textViewStyle">@style/AppTheme.TextView</item>
<item name="android:actionBarStyle">@style/AppTheme.ActionBarStyle</item>
</style>
<style name="AppTheme.ActionBarStyle" parent="@android:style/Widget.Holo.Light.ActionBar">
<item name="android:titleTextStyle">@style/AppTheme.ActionBar.TitleTextStyle</item>
</style>
<style name="AppTheme.ActionBar.TitleTextStyle" parent="@android:style/TextAppearance.Holo.Widget.ActionBar.Title">
<item name="android:textColor">@color/themeapp</item>
</style>
<style name="AppTheme.TextView" parent="@android:style/Widget.TextView">
<item name="android:textColor">#FFFFFF</item>
</style>
Run Code Online (Sandbox Code Playgroud)
这不起作用,但我不明白为什么.这应该根据这个答案工作.textview样式是否正常工作.
我做错了什么?
更新:改为满足下面的Grace Feng答案
我正在使用以下组件进行简单的列表活动:EditText,RecyclerView,ProgressBar和Textview.一切都运行得很好,除了与EditText重叠并且"超出"屏幕底部的RecyclerView,所以最后一项被部分剪掉(参见截图).我做错了什么?
主要活动:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="jacopo.com.flickrgallery.GalleryActivity">
<EditText
android:id="@+id/search_text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:hint="search by tag..."
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ProgressBar
android:id="@+id/gallery_progress"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/search_text" />
<android.support.v7.widget.RecyclerView
android:id="@+id/gallery_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/search_text" />
<TextView
android:id="@+id/gallery_error"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:layout_marginEnd="8dp"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/search_text"
tools:text="error" />
</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)
android android-layout android-recyclerview android-constraintlayout
我刚刚安装了Android Studio,我遇到了一个问题:
经过一段时间的工作,我不能再编辑文件,我必须重新启动IDE再次编辑它们.
那太烦人了.有办法解决这个问题吗?我看到谷歌上的其他人有几乎相同的问题(主要是在ubuntu上),但我找不到任何解决方案,除了临时的:如果我点击文件的滚动条我可以再次编辑它,但是如果我更改文件或在其外做任何其他事情,将再次触发该问题; 所以实际的问题是编辑器没有通过点击它获得焦点.
我在Windows 8.1上.
我对使用新架构组件时数据绑定应该如何工作感到困惑.
假设我有一个带有列表,ProgressBar和TextView的简单Activity.Activity应该负责控制所有视图的状态,但ViewModel应该保存数据和逻辑.例如,我的Activity现在看起来像这样:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
binding = DataBindingUtil.setContentView(this, R.layout.activity_main);
listViewModel = ViewModelProviders.of(this).get(ListViewModel.class);
binding.setViewModel(listViewModel);
list = findViewById(R.id.games_list);
listViewModel.getList().observeForever(new Observer<List<Game>>() {
@Override
public void onChanged(@Nullable List<Game> items) {
setUpList(items);
}
});
listViewModel.loadGames();
}
private void setUpList(List<Game> items){
list.setLayoutManager(new LinearLayoutManager(this));
GameAdapter adapter = new GameAdapter();
adapter.setList(items);
list.setAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)
而ViewModel只负责加载数据并在列表准备好后通知Activity,以便它可以准备适配器并显示数据:
public int progressVisibility = View.VISIBLE;
private MutableLiveData<List<Game>> list;
public void loadGames(){
Retrofit retrofit = GamesAPI.create();
GameService service = retrofit.create(GameService.class);
Call<GamesResponse> call = service.fetchGames();
call.enqueue(this);
}
@Override
public void onResponse(Call<GamesResponse> call, …Run Code Online (Sandbox Code Playgroud) 今天,我正在android模拟器上测试一个应用程序,我厌倦了使用屏幕键盘,因此我编辑了设备并启用了键盘支持,下一次我启动模拟器时,出现此错误:
它停止工作
我尝试在各种gpu模式之间切换,并从命令行启动仿真器,强制其使用主机gpu,但没有任何效果。有人知道解决这个问题的方法吗?
android android-virtual-device android-emulator android-studio
is there a way to create a drop shadow given a drawable with a path like below:
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportHeight="24.0"
android:viewportWidth="24.0">
<path
android:fillColor="#FFFFFF"
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
</vector>
Run Code Online (Sandbox Code Playgroud)
xml 和编程方式都很好。我尝试做一些研究,但什么也没找到。
编辑:理想情况下,我需要一些可与任何向量重复使用的东西。就像是:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
//magic happens
</item>
<item>
<include> my_vector </include>
</item>
</layer-list>
Run Code Online (Sandbox Code Playgroud)
再说一遍,即使不是更好,即使以编程方式也没关系
我遇到一个奇怪的问题:我有一个通用函数,用于检索资源字符串(这是为了避免每次都编写context.resources.getString()):
protected fun string(@StringRes stringRes: Int, vararg args: String): String = app.getString(stringRes, args)
Run Code Online (Sandbox Code Playgroud)
直到现在,当我添加varargs以检索格式化的字符串时,它的工作情况都很好。简单的字符串仍然可以正常工作,但是当我尝试检索格式化的字符串时:
string(R.string.formatted_string, myId)
Run Code Online (Sandbox Code Playgroud)
我的字符串资源:
<string name="formatted_string">#%s</string>
Run Code Online (Sandbox Code Playgroud)
我得到一些垃圾:
#[Ljava.lang.String;@3a59711
Run Code Online (Sandbox Code Playgroud)
预期:
#4848684
Run Code Online (Sandbox Code Playgroud)
我请求的资源的垃圾更改
它看起来是一个对象标识符。
如果我不使用该方法,它将正常工作
这是怎么回事
我对 Dagger 比较陌生,刚刚开始使用 Hilt。我想要的是将应用程序范围的存储库(意味着它在任何地方都需要是相同的对象)注入到ViewModel. 该存储库将用于检索用户、身份验证令牌等。这是我能得到的最接近的:
@Module
@InstallIn(ApplicationComponent::class)
abstract class ApplicationModule {
@Singleton
@Binds
abstract fun bindUserService(
userRepository: UserRepository
): UserService
}
@Singleton
class UserRepository @Inject constructor(
) : UserService {
private var _user: User? = null
override fun getUser(): Observable<User> {
return if (_user == null) {
fetchUser()
} else {
Observable.just(_user)
}
}
private fun fetchUser(): Observable<User> {
return Observable.just(User("foo", Random.nextDouble(100.00)))
.delay(2, TimeUnit.SECONDS)
.doOnEach { _user = it.value }
}
}
class ProfileViewModel @ViewModelInject constructor(
private val …Run Code Online (Sandbox Code Playgroud) 我需要在颤振中实现这一点:
我尝试制作 aRow并设置背景来Text处理矩形,然后设置 aClipPath来制作三角形。这样做的问题是边缘不精确(您可以在下图中看到矩形和三角形之间有一条细线),而且尺寸也固定,ClipPath因此如果我想在某个时候更改文本大小,我会必须再次微调三角形。
这是我的代码:
class TriangleClipper extends CustomClipper<Path> {
@override
Path getClip(Size size) {
final path = Path();
path.lineTo(0.0, size.height);
path.lineTo(size.width / 3, size.height);
path.close();
return path;
}
@override
bool shouldReclip(TriangleClipper oldClipper) => false;
}
Row(
children: [
Container(
color: Colors.orange,
child: Padding(
padding: const EdgeInsets.all(4.0),
child: Text(
"a label",
),
),
),
ClipPath(
clipper: TriangleClipper(),
child: Container(
color: Colors.orange,
height: 23,
width: 20,
),
)
],
)
Run Code Online (Sandbox Code Playgroud)
我虽然double.infinity在 …