gpt4 book ai didi

java - setText() 在适配器内部不工作

转载 作者:搜寻专家 更新时间:2023-11-01 09:31:45 24 4
gpt4 key购买 nike

我正在做一个 Adroid 应用程序来练习一下,但我在这里发现了一些麻烦。我有这个适配器来列出一些产品。我可以在 Activity 中看到它们,但 TextView 是空的。

您知道为什么 setText() 函数不起作用吗?我认为这将是一个愚蠢的语法错误或类似的错误,但我找不到。

public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> {

private Cursor cursor;
private boolean full;

public CardAdapter(Cursor c) {
cursor = c;
full = cursor.moveToFirst();
}

@Override
public CardAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {

View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.product_row, parent, false);

ViewHolder vh = new ViewHolder(v);
return vh;
}


@Override
public void onBindViewHolder(ViewHolder holder, int position) {
try {
if (full) {
String name = cursor.getString(cursor.getColumnIndex("name"));
holder.productName.setText(name);
full = cursor.moveToNext();
if(!full) cursor.close();
}
} catch (Exception e) {
Log.d("ADAPTER", "Error while trying to get rows from database");
}
}

@Override
public int getItemCount() {
int i = cursor.getCount();
if(i > 0) {
full = true;
return i;
}
else {
full = false;
return 0;
}
}

public class ViewHolder extends RecyclerView.ViewHolder{
TextView productName;
public ViewHolder(View v) {
super(v);
productName = ((TextView) v.findViewById(R.id.productName));
}
}
}

更新:更改onBindViewHolder:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {

try {
if (cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex("name"));

holder.productName.setText(name);
notifyItemChanged(position);
} while (cursor.moveToNext());

}
} catch (Exception e) {
Log.d("ADAPTER", "Error while trying to get rows from database");
}
cursor.close();
}

TextView xml:

<TextView
android:id="@+id/productName"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:textColor="#FFFFFF"
android:textSize="20sp"
android:textStyle="bold"
/>

在 mainACtivity 中,onCreate() 上有这个:

    pRecyclerView = (RecyclerView) findViewById(R.id.recycler_view);
pRecyclerView.setHasFixedSize(true);
pLayoutManager = new LinearLayoutManager(this);

productManager = new ProductManager(this);
Cursor c = productManager.getProducts();

pAdapter = new CardAdapter(c);
pRecyclerView.setAdapter(pAdapter);
pRecyclerView.setLayoutManager(pLayoutManager);

解决方案因为它也在我在这里发布的评论中:textColor 被设置为白色。天才。

谢谢!

最佳答案

适配器根据计数进行迭代,即 cursor.getCount()。您可以使用它的位置从索引中获取项目。但在你的情况下,你必须自己迭代。否则每次你的完整 block 被调用时都将没有结果。

尝试:-

if(cursor.moveToFirst()) {
do {
String name = cursor.getString(cursor.getColumnIndex("name"));
}while (cursor.moveToNext());
}
cursor.close();

最后调用 notifyItemPositionChanged() 并传递相同的位置以使 View 刷新。

关于java - setText() 在适配器内部不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46636152/

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