【发布时间】:2015-12-13 07:58:34
【问题描述】:
我看到了所有与我的问题相似的问题(this、this、this 和 this 链接)
我的 Activity 中有 myAdapter.notifyDataSetChanged() 但它不起作用
我有 3 节课,
- DBHelper - 用于存储和获取数据库内容(这里没有问题)
- SimpleRecyclerAdapter - RecyclerList 的适配器
- 第三个活动
我在 ThirdActivity 中做了什么:
我有 TextBox 来获取数据并将其存储在数据库和按钮中。在 Button的Onclicklistener,我指定了代码
- 从文本框中获取文本
- 使用 DBHelper 将其添加到表中
- 从 DBHelper 以 ArrayList 形式检索数据
- myAdapter.notifyDataSetChanged()
当我单击按钮时,我在 LogCat 中获得了数据,这是我在 OnclickListener 中指定的,但它没有反映到列表视图中。
这是我的代码,
第三个活动:
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();
}
}
SimpleRecyclerViewAdapter:
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);
}
}
}
【问题讨论】:
-
您在哪里从 DBHelper 检索数据作为 ArrayList?为什么要使用 myNotesList 2 次?
-
在第三个 Activity 中,在这一行的 printData() 方法中 `myNotesList=dbHelper.databasetostring();` 在 Button Click Listener 中调用 printData() 方法
-
你能更改私有 ArrayList
myNotesList=new ArrayList () => private ArrayList myNotesList2=new ArrayList () 吗? -
@tiny 阳光:改变变量名有什么用?我不懂诶。 :-\
-
@Santiago Hernández 是对的。
标签: android android-recyclerview