【发布时间】:2018-10-12 15:11:40
【问题描述】:
我有与recyclervView其与光标得到SQLite数据库的数据的应用。现在,我想这些DATAS传递到另一个活动时,我们点击一个项目。它可以通过DATAS与光标? 并获得行的ID数据库,以确定数据? P>
第二个问题,这对于itemOnClick方法更好的解决方案?当我用这个方法(在viewHolder类?还是在onBindValue?) 我需要把在putExtra方法?我的光标? P>
我的适配器和保持器的代码低于如果可以帮助:
public class GroceryAdapter extends RecyclerView.Adapter<GroceryAdapter.GroceryViewHolder> implements View.OnClickListener {
private Context mContext;
private Cursor mCursor;
int id;
public GroceryAdapter(Context context,Cursor cursor){
mContext = context;
mCursor = cursor;
}
@Override
public void onClick(View v) {
}
public class GroceryViewHolder extends RecyclerView.ViewHolder{
public TextView dateItem, colorItem, textItem;
public ToggleButton lucidItem;
public GroceryViewHolder(final View itemView) {
super(itemView);
dateItem = itemView.findViewById(R.id.date_item);
colorItem = itemView.findViewById(R.id.color_item);
textItem = itemView.findViewById(R.id.text_item);
lucidItem = itemView.findViewById(R.id.lucid_item);
}
}
@NonNull
@Override
public GroceryViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
LayoutInflater inflater = LayoutInflater.from(mContext);
View view = inflater.inflate(R.layout.grocery_item, parent, false);
return new GroceryViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull GroceryViewHolder holder, int position) {
if(!mCursor.moveToPosition(position)){
return;
}
final int id = mCursor.getInt(mCursor.getColumnIndex(CarnetDAO.ID_CARNET));
String text = mCursor.getString(mCursor.getColumnIndex(CarnetDAO.TEXTE_CARNET));
int color = mCursor.getInt(mCursor.getColumnIndex(CarnetDAO.COULEUR_CARNET));
String date = mCursor.getString(mCursor.getColumnIndex(CarnetDAO.DATE_CARNET));
int lucide = mCursor.getInt(mCursor.getColumnIndex(CarnetDAO.LUCIDITE_CARNET));
holder.dateItem.setText(date);
holder.colorItem.setBackgroundColor(color);
holder.textItem.setText(text);
if(lucide == 1){
holder.lucidItem.setVisibility(View.VISIBLE);
}
}
@Override
public int getItemCount() {
return mCursor.getCount();
}
public void swapCursor(Cursor newCursor){
if(mCursor != null){
mCursor.close();
}
mCursor = newCursor;
if(newCursor != null){
notifyDataSetChanged();
}
}
}
我的数据模型:
公共类证{
public Carnet(){
super();
}
private int id;
private String text;
private String userId;
private int color;
private String method;
private String date;
private int lucid;
public int getId(){
return id;
}
public void setId(int id){
this.id = id;
}
public String getText(){
return text;
}
public void setText(String text){
this.text = text;
}
public int getLucid(){
return lucid;
}
public void setLucid(int lucid){
this.lucid = lucid;
}
public void setMethod(String method){
this.method = method;
}
public String getMethod(){
return method;
}
public void setDate(String date){
this.date = date;
}
public String getDate(){
return date;
}
public void setColor(int color){
this.color = color;
}
public int getColor(){
return color;
}
}
我看到Parcelable,但我不知道如何使用它,这个是什么专业。 P>
编辑
我试图抓住我的意图在新的活动,但应用程序崩溃。 我收到了这个错误:
致命异常:主 过程:morpheus.oniri,PID:6696 了java.lang.RuntimeException:无法启动活动 ComponentInfo {morpheus.oniri / morpheus.oniri.activities.afficherCarnetActivity}: 显示java.lang.NullPointerException:尝试调用虚拟方法 “布尔java.lang.String.isEmpty()”上的空对象引用 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在android.app.ActivityThread.access $ 800(ActivityThread.java:151) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1303) 在android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 显示java.lang.NullPointerException:通过引起尝试调用虚拟方法 “布尔java.lang.String.isEmpty()”上的空对象引用 在morpheus.oniri.activities.afficherCarnetActivity.getAllData(afficherCarnetActivity.java:113) 在morpheus.oniri.activities.afficherCarnetActivity.onCreate(afficherCarnetActivity.java:107) 在android.app.Activity.performCreate(Activity.java:5990) 在android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 在android.app.ActivityThread.access $ 800(ActivityThread.java:151) 在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1303) 在android.os.Handler.dispatchMessage(Handler.java:102) 在 android.os.Looper.loop(Looper.java:135) 在android.app.ActivityThread.main(ActivityThread.java:5254) 在 java.lang.reflect.Method.invoke(本机方法) 在 java.lang.reflect.Method.invoke(Method.java:372) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:903) 在com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) P>
我这样做在OnCreate()。 P>
Intent i = getIntent();
Carnet carnetP;
carnetP = i.getParcelableExtra("data");
notes = carnetP.getText();
该错误是在这条线,在我称为在OnCreate(方法getAllData()) P>
if(!notes.isEmpty()){
dream.setVisibility(View.VISIBLE);
getDream.setChecked(true);
getDream.setBackgroundResource(R.color.colorLog);
} else{
dream.setVisibility(View.GONE);
getDream.setChecked(false);
getDream.setBackgroundResource(R.color.colorText);
}
实际上,当我做了Log.d()我的字符串变量“笔记”为空,但如果我我就“carnetP”做Log.d()我有这个 P>
morpheus.oniri.model.Carnet@14dbb242 而这是不是存储在我的数据库。 P>
我做了我putExtra上点击这样 P>
公共类GroceryViewHolder延伸RecyclerView.ViewHolder器具View.OnClickListener { 公众的TextView dateItem,colorItem,textItem; 公共切换按钮lucidItem; P>
public GroceryViewHolder(final View itemView) {
super(itemView);
dateItem = itemView.findViewById(R.id.date_item);
colorItem = itemView.findViewById(R.id.color_item);
textItem = itemView.findViewById(R.id.text_item);
lucidItem = itemView.findViewById(R.id.lucid_item);
itemView.setOnClickListener(this); //my itemView clik
}
@Override
public void onClick(View v) {
int pos = getAdapterPosition();
if(pos != RecyclerView.NO_POSITION){
Intent intent = new Intent(mContext, afficherCarnetActivity.class);
intent.putExtra("data", new Carnet());
mContext.startActivity(intent);
}
}
}
【问题讨论】:
标签: android sqlite android-recyclerview cursor