事情是这样的:有人知道setHasFixedSize方法吗?有人说如果所有项目大小都相同,它允许进行优化,而在android.support.v7.widget的RecyclerView类中,它评论如下:如果事先可以知道适配器内容的变化,RecyclerView可以执行多次优化无法改变RecyclerView本身的大小.如果您使用RecyclerView属于此类别,请将此设置为true.
那是什么意思?有人能告诉我使用它的背景或解释上面"这个类别"的含义吗?非常感谢.
我有一个RecyclerView水平布局。各个适配器项目的高度可以取决于项目的内容。
所以理论上它可以如下所示:
我现在的问题是它wrap_content似乎只关心第一个问题的高度,因为我得到的结果是这样的:
如您所见,第 4 项被切断。但是,如果我把最高的项目放在第一位,它就可以完美地工作。
并摆脱明显的解决方案;我不知道物品的高度。我只能在测试期间这样做。
——
适配器项.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="100dp"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:orientation="vertical"
android:animateLayoutChanges="true"
android:padding="@dimen/padding_view_small">
<ImageView
android:id="@+id/image"
android:layout_width="50dp"
android:layout_height="50dp"
android:layout_gravity="center_horizontal"
app:srcCompat="@drawable/flamme"/>
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@color/black"
android:layout_marginTop="@dimen/padding_view_small"
android:text="@string/placeholder"
android:gravity="center_horizontal"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
父文件
<LinearLayout
android:id="@+id/symbol_list_parent"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:background="@drawable/container_content"
android:padding="@dimen/padding_view_normal">
<android.support.v7.widget.RecyclerView
android:id="@+id/symbol_list"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"/>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
活动.java
...
final ProductPictogramAdapter symbolAdapter = new ProductPictogramAdapter();
final View symbolListParent = findViewById(R.id.symbol_list_parent);
RecyclerView symbolList = findViewById(R.id.symbol_list);
symbolList.setLayoutManager(new LinearLayoutManager(ProductDetailActivity.this, LinearLayoutManager.HORIZONTAL, false));
symbolList.setAdapter(symbolAdapter);
symbolList.setHasFixedSize(true);
Run Code Online (Sandbox Code Playgroud) 我有一个带有适配器的RecycleView,它显示了一个服务器列表,用户必须选择一个服务器.
当我在onClick()方法中调用notifyItemChanged(previousPosition)以使旧服务器未被选中并选择新服务器时,这使得RecycleView列表完全跳到列表中间.
当我点击RecycleView列表中最后2或3个服务器之一时,会发生此问题
这是我的RecyclerView.Adapter的代码:
public class ServerAdapter extends RecyclerView.Adapter<ServerAdapter.ServerViewHolder> {
private List<Server> listServers = new ArrayList<>();
private int[] icons = new int[]{R.drawable.server1,R.drawable.server2,R.drawable.server3,R.drawable.server4,R.drawable.server5,R.drawable.server6,R.drawable.offline};
private int selected = 0;
private int previousSelected = 0;
public ServerAdapter(List<Server> listServers){
this.listServers = listServers;
}
@Override
public ServerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.server_relative_layout,parent,false);
return new ServerViewHolder(view);
}
@Override
public void onBindViewHolder(final ServerViewHolder holder, final int position) {
if(position == selected){
holder.getBackground().setSelected(true);
}else{
holder.getBackground().setSelected(false);
}
holder.getBackground().setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) …Run Code Online (Sandbox Code Playgroud) 我需要类似于此实现的行为但 NestedScrollView 将是父级, RecyclerView 将是 NestedScrollView 的子级。
例如:https : //medium.com/widgetlabs-engineering/scrollable-nestedscrollviews-inside-recyclerview-ca65050d828a
我不确定它是否可以实现。尝试在 child(RV) 滚动时禁用 parent(NSV),但是在 child 上滚动会滚动整个视图,包括 parent。
android android-scrollview android-recyclerview android-nestedscrollview
在尝试生成签名的 APK 以便发布时。我发现以下错误。
这个错误是在我将 Android Studio 更新到 4.1.3 后才出现的。
经过检查,我发现 recyclerView.setHasFixedSize(true) 如果与 wrap_content 一起使用以获取滚动方向的大小,则会出现致命的 lint 错误。我已经通过在所有活动中删除该行来解决它,但我仍然需要知道为什么这个错误现在是致命的,更新之前没有这样的错误。
我已经阅读了 Android 开发人员信息以及许多 SO 帖子和 RecyclerView 文章。我仍然不清楚我是否可以使用:
recyclerView.setHasFixedSize(true);
Run Code Online (Sandbox Code Playgroud)
我的 RecyclerView 列表中的方法。随着 CardView 项目随着时间的推移动态添加和删除,我的 RecyclerView 列表的大小将不断变化。但是,每个 CardView 的大小(高度和长度)是固定的。请指教。
我正在尝试实现RecyclerView,显示来自JSONArray的数据.解析工作完美,但RecyclerView在每个项目中显示必须仅在最后一项中的信息.屏幕截图清楚地表明了这一点.
这是我的代码:
MainActivity.java
public class MainActivity extends AppCompatActivity {
RecyclerView mRecyclerView;
private RecyclerView.Adapter mAdapter;
private RecyclerView.LayoutManager mLayoutManager;
protected void onCreate(Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
new parseTask().execute();
}
private class parseTask extends AsyncTask<Void, Void, String> {
HttpURLConnection urlConnection = null;
BufferedReader reader = null;
String resultJson = "";
ProgressDialog pdLoading = new ProgressDialog(MainActivity.this, R.style.MyDialogStyle);
@Override
protected void onPreExecute() {
super.onPreExecute();
pdLoading.setMessage("\tLoading...");
pdLoading.setCancelable(false);
pdLoading.show();
}
@Override
protected String doInBackground(Void... params) {
try {
URL url = new URL("http://songo.eu.pn/db_GetFromSongs.php");
urlConnection = …Run Code Online (Sandbox Code Playgroud)