gpt4 book ai didi

java - 加载数据并插入不显示的 RecyclerView

转载 作者:行者123 更新时间:2023-11-29 14:11:57 25 4
gpt4 key购买 nike

我一直在关注 this guide用于 RecyclerView 并尝试将其用于我的特定用例,但在应用程序运行时 RecyclerView 为空。

我是 Java 和 Android 开发的新手,所以我只是进行测试以尝试掌握一些东西。在这种特殊情况下,我只是试图列出已安装的软件包,其中软件包名称以特定字符串开头,例如“com.google”应该匹配“com.google.camera”。

我的主要 Activity 如下所示:

public class MainActivity extends AppCompatActivity {

ArrayList<PackageInfo> packages = new ArrayList<PackageInfo>();
PackageManager pm;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

RecyclerView lstPackages = (RecyclerView) findViewById(R.id.lstInstalledPackages);

pm = getPackageManager();
List<PackageInfo> allPackages = pm.getInstalledPackages(PackageManager.GET_META_DATA);
for(PackageInfo pkg : allPackages) {
if(pkg.packageName.startsWith("com.google")){
packages.add(pkg);
Log.d("PKG", "Package found: " + pkg.packageName);
}
}

PackageItemAdapter adapter = new PackageItemAdapter(packages);
lstPackages.setAdapter(adapter);
lstPackages.setLayoutManager(new LinearLayoutManager(this));
adapter.notifyDataSetChanged();
}
}

包裹元素:

public class PackageItem {
private PackageInfo mPackageInfo;

public PackageItem(PackageInfo packageInfo) {
mPackageInfo = packageInfo;
}

public String getName() {
return mPackageInfo.applicationInfo.name;
}

public String getPackageId() {
return mPackageInfo.packageName;
}

public String getVersion() {
return mPackageInfo.versionName;
}
}

PackageItemAdapter:

public class PackageItemAdapter extends RecyclerView.Adapter<PackageItemAdapter.ViewHolder> {
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView packageName;

public ViewHolder(View viewItem) {
super(viewItem);

packageName = (TextView)viewItem.findViewById(R.id.txtPackageName);
}
}

private List<PackageItem> mPackages;

public PackageItemAdapter(List<PackageInfo> packages) {
ArrayList<PackageItem> pis = new ArrayList<PackageItem>();
for(PackageInfo pkg : packages) {
pis.add(new PackageItem(pkg));
}
mPackages = pis;
}

@Override
public PackageItemAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);

View packageView = inflater.inflate(R.layout.packageitem, parent, false);

ViewHolder viewHolder = new ViewHolder(packageView);
return viewHolder;
}

@Override
public void onBindViewHolder(PackageItemAdapter.ViewHolder viewHolder, int position) {
PackageItem packageItem = mPackages.get(position);

TextView tv = viewHolder.packageName;
tv.setText(packageItem.getName());
}

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

packageitem.xml:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

<TextView
android:id="@+id/txtPackageName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>

您能看出我遗漏了什么吗,或者是否有一些怪癖或我必须考虑的事情才能使它正常工作,或者我完全不在乎?

最佳答案

我之前遇到过这个问题。您需要将 Layout Manager 设置为您的 recyclerView,因为没有它,您的 Recycler 就没有合适的布局,并且不知道如何在其中放置您的项目 View 。所以在你找到你的回收者 View 之后:

RecyclerView lstPackages = (RecyclerView) findViewById(R.id.lstInstalledPackages);

添加设置布局的行,如

lstPackages.setLayoutManager(new LinearLayoutManager(this));

关于java - 加载数据并插入不显示的 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59529357/

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