Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/197.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java setText()在适配器内不工作_Java_Android_Adapter - Fatal编程技术网

Java setText()在适配器内不工作

Java setText()在适配器内不工作,java,android,adapter,Java,Android,Adapter,我正在做一个Adroid应用程序来练习一点,但我在这里发现了一些问题。我有这个适配器来列出一些产品。我可以在活动中看到它们,但文本视图为空 您知道为什么setText()函数不起作用吗? 我认为这将是一个愚蠢的语法错误或类似的东西,但我不能找到它 public class CardAdapter extends RecyclerView.Adapter<CardAdapter.ViewHolder> { private Cursor cursor; private boolean

我正在做一个Adroid应用程序来练习一点,但我在这里发现了一些问题。我有这个适配器来列出一些产品。我可以在活动中看到它们,但文本视图为空

您知道为什么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));
    }
 }
}
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"
                />
解决方案 因为这也是我在这里发布的一条评论:textColor设置为白色。天才


谢谢大家!

您需要检查full是否为true,name是否为null。如果name为null或为空,则它将不设置任何其他内容,也不设置Textview上name变量中的任何内容。因此,请调试或添加日志以打印name中的值。

适配器根据计数进行迭代,即
cursor.getCount()
。您可以使用其位置从索引中获取项。但在您的情况下,您必须迭代您自己的。否则,每次调用您的完整块时,都不会得到任何结果

尝试:-


在结束时,调用notifyItemPositionChanged()并传递相同的位置以刷新视图。

尝试调试并检查完整值是否为真,名称是否正确。还有一个主要问题是,您没有正确循环它,请在实现所有游标对象的同时尝试执行。如果(cursor.moveToFirst()){do{String name=cursor.getString(cursor.getColumnIndex(“name”);}而(cursor.moveToNext());}cursor.close()@AnkitAman但是适配器使用getItemCount()通过onBindViewHolder自己迭代,不是吗?也许我把事情弄糊涂了。@AnkitAman在调试时也只在onBindViewHolder中输入一次,并正确地获取nameAdapter根据计数(cursor.getCount();)进行迭代。您可以使用其位置从索引中获取项。但在您的情况下,您必须迭代您自己的。否则,每次调用完整块时,都不会得到任何结果。它是在do内部或onBindViewHolder函数的末尾得到这样的名称吗?“这个。改变了(位置);'在关闭后的结束调用时更改(位置);试着调试并检查do while是否使用正确的输出。它正确地获取了名称,并且只迭代了一次,因为数据库中只有一行,所以它显然做得很好,但仍然没有显示您设置的文本颜色为的文本“#FFFFFF这是==白色只要改变颜色,它可能与您的背景色匹配。
<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"
                />
    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);
if(cursor.moveToFirst()) {
   do {
       String name = cursor.getString(cursor.getColumnIndex("name"));
   }while (cursor.moveToNext());
}
cursor.close();