gpt4 book ai didi

android - 使用数据库动态更新 Recycler Listview

转载 作者:搜寻专家 更新时间:2023-11-01 07:51:42 26 4
gpt4 key购买 nike

我看到了所有与我的问题相似的问题(在 thisthisthisthis 链接中)

我的 Activity 中有 myAdapter.notifyDataSetChanged() 但它不起作用

我有3个类(class),

  • DBHelper - 用于存储和获取数据库内容(这里没有问题)
  • SimpleRecyclerAdapter - RecyclerList 的适配器
  • 第三 Activity

What i did in ThirdActivity :

I have TextBox to get data and store it in Database and a Button. In the Onclicklistener of Button, i specified code to

  • get text from textbox
  • add it into table using DBHelper
  • retrive data as ArrayList from DBHelper
  • myAdapter.notifyDataSetChanged()

当我单击按钮时,我在 LogCat 中获取数据,这是我在 OnclickListener 中指定的,但它未反射(reflect)到 ListView 中。

这是我的代码,

第三 Activity :

public class ThirdActivity extends AppCompatActivity{

private DrawerLayout mDrawerLayout;
DbHelper dbHelper;

EditText et;
Button addButton;
RecyclerView rv;
ArrayList<String> myNotesList;
SimpleRecycler3Adapter adapter3;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.thirdactivity);
myNotesList = new ArrayList<>();
et=(EditText) findViewById(R.id.et);
addButton=(Button)findViewById(R.id.addButton);
rv = (RecyclerView) findViewById(R.id.dbListrv);
LinearLayoutManager linearLayoutManager = new LinearLayoutManager(getBaseContext());
rv.setLayoutManager(linearLayoutManager);
rv.setHasFixedSize(true);

adapter3 = new SimpleRecycler3Adapter(myNotesList);
rv.setAdapter(adapter3);
dbHelper = new DbHelper(this, null, null, 1);


addButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("DB", "Constructor");
String note=et.getText().toString();
dbHelper.addNote(note);
printData();
}
});
}

public void printData(){
Log.d("DB","Constructor");
myNotesList=dbHelper.databasetostring();
Log.d("DB","Data came"+myNotesList.get(myNotesList.size()-1));
// adapter3 = new SimpleRecycler3Adapter(myNotesList);
// rv.setAdapter(adapter3);
adapter3.notifyDataSetChanged();
}
}

简单回收器 View 适配器:

public class SimpleRecycler3Adapter extends RecyclerView.Adapter<SimpleRecycler3Adapter.NotesHolder> {

private ArrayList<String> myNotesList=new ArrayList<String>();

String TAG="ThirdAdapter kbt";
RecyclerView rv;

public SimpleRecycler3Adapter(ArrayList<String> myList) {
Log.d(TAG,"Constructor");

Log.d(TAG,"Not null");
int i = 0;
while (i < myNotesList.size()) {
myNotesList.add(myList.get(i).toString());
}
Log.d(TAG,"finish");
}


@Override
public NotesHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
Log.d(TAG,"On create started");
View view2 = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.recyclerlist3_item, viewGroup, false);
Log.d(TAG,"ADAP STAR ONCR second switch 2nd line");
NotesHolder viewHolder2 = new NotesHolder(view2);
Log.d(TAG,"ADAP STAR ONCR second switch 3nd line");
return viewHolder2;
}

@Override
public void onBindViewHolder(NotesHolder notesHolder, int i) {
Log.d(TAG, "ONBIND SECOND i value is " + i);


// notesHolder.thumbnail.setImageResource(R.drawable.placeholder);

notesHolder.dblistitem.setText(myNotesList.get(i));
Log.d(TAG,"ONBIND second title issssss");


}


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

class NotesHolder extends RecyclerView.ViewHolder {

protected ImageView thumbnail;
protected TextView dblistitem;
public NotesHolder(View itemView) {
super(itemView);
Log.d(TAG, "JSON Inside HOLDER");
rv=(RecyclerView)itemView.findViewById(R.id.dbListrv);
// thumbnail = (ImageView) itemView.findViewById(R.id.thumbnail);
dblistitem = (TextView) itemView.findViewById(R.id.dblistitem);


}

}

}

最佳答案

您不是在更新适配器类中的 myNotesList,而是在 Activity 类中。但是适配器使用它的本地 myNotesList。

因此,在单击按钮时,使用可用的最新数据更新适配器的 myNotesList 并通知适配器。

编辑
将最新数据传递给适配器。在适配器类中有这个方法并在 notifyDataSetChanged() 之前调用它;

public void updateNotes(ArrayList<String> notesList) {
myNotesList = notesList;
}

关于android - 使用数据库动态更新 Recycler Listview,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34249082/

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