sqliteデータベースからデータを取得するリサイクラビューを作成しました。私は2つの編集テキストを含む小さなダイアログを持ち、ポジティブボタンを押した後、これらの値はデータベースに保存され、これらの新しい値に従って私のリサイクラビューが更新されるようにしたい... MyAdapter.javaファイルにメソッドを作成し、この仕事...静的メソッドと非静的メソッドの競合によるリサイクラビューの更新ができません
package bk.acs.RecyclerView;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import android.widget.Toast;
import java.util.List;
import bk.acs.R;
/**
* Created by bk on 01-03-2017.
*/
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.Holder>{
List<ListItem> listdata;
LayoutInflater inflater;
public MyAdapter(List<ListItem> list, Context c)
{
this.inflater=LayoutInflater.from(c);
listdata=list;
}
@Override
public Holder onCreateViewHolder(ViewGroup parent, int viewType) {
View view=inflater.inflate(R.layout.subjects_li,parent,false);
return new Holder(view);
}
@Override
public void onBindViewHolder(Holder holder, int position) {
ListItem item=listdata.get(position);
holder.subjectName.setText(item.subName);
holder.serialNo.setText(item.sno);
}
@Override
public int getItemCount() {
return listdata.size();
}
public void change(int pos)
{
notifyItemInserted(pos-1);
}
class Holder extends RecyclerView.ViewHolder implements View.OnClickListener
{
TextView subjectName;
TextView serialNo;
View container;
public Holder(View itemView) {
super(itemView);
subjectName=(TextView)itemView.findViewById(R.id.subjectTitle);
serialNo=(TextView)itemView.findViewById(R.id.sno);
container=itemView.findViewById(R.id.cont_root);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
listdata.remove(getPosition());
notifyItemRemoved(getPosition());
}
}
}
は、あなたが見ることができるように変更する方法が明確にリサイクルビューを更新し、私はMyDialog.java
からこのメソッドを呼び出しています。ここではMyDialog.java
package bk.acs.AddingToDatabase;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.ContentValues;
import android.content.DialogInterface;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import bk.acs.R;
import bk.acs.RecyclerView.MyAdapter;
import bk.acs.databases.Main;
/**
* Created by bk on 27-02-2017.
*/
public class MyDialog extends DialogFragment {
View v;
EditText et1,et2;
ContentValues contentValues=new ContentValues();
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
LayoutInflater inflater=getActivity().getLayoutInflater();
v=inflater.inflate(R.layout.add_dialog,null);
et1=(EditText)v.findViewById(R.id.subjectName);
et2=(EditText)v.findViewById(R.id.fname);
AlertDialog.Builder builder=new AlertDialog.Builder(getActivity());
builder.setView(v).setPositiveButton("ADD", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
final String subname=et1.getText().toString(),fname=et2.getText().toString();
Main main=new Main(getActivity(),"subjects_db",1,1);
contentValues.put("SubjectName",subname);
contentValues.put("FileName",fname);
SQLiteDatabase db=main.getWritableDatabase();
long res=db.insert("subjectsTable",null,contentValues);
MyAdapter.change(res-1);
Toast.makeText(getActivity(), "Number of subjects ="+res, Toast.LENGTH_SHORT).show();
}
}).setNegativeButton("CANCEL", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
return builder.create();
}
}
あるん
しかし私の問題は、私が電話しているときですこれはMyDialog.javaから、静的コンテキストから非静的メソッドを呼び出すことはできないと言っています。だから私はchange()を静的に変更しました...今はnotifyItemInserted()を呼び出すことができないと言っています静的コンテキスト...それは、この答えに非常に似ています... ...私に
ありがとうたくさんの男...これを達成する他の方法はありますか? –
私はこれが最もクリーンでベストプラクティスの方法だと思います。アクティビティをバイパスしたい場合は、代わりにアダプタをダイアログリスナーにすることができます。 – drawinfinity
ありがとう仲間...アンドロイドを学ぶための良い情報源をお勧めしますか? –