2016-09-23 20 views
2

私はRecyclerViewにダイアログフラグメントを持っており、ダイアログからユーザからデータを取得し、それをデータベースに保存し、それをrecyclerviewに表示すると、これはすべて機能しています。私はデータを追加するとき私はリサイクラーに表示するには、アプリケーションを再起動する必要があります、どのようにアダプタのデータを通知することができます変更ですか?フラグメントからRecyclerViewアダプタを通知する

ダイアログフラグメント

add = (Button) rootView.findViewById(R.id.addbutton); 
    add.setOnClickListener(this); 

private void insert() { 
     Title = addTitle.getText().toString(); 
     Des= addDesc.getText().toString(); 
     db.insertIntoDB(Title, Des);} 
    @Override 
    public void onClick(View v) { 
     if (addTitle.getText().toString().trim().equals("")) { 
      addTitle.setError(" Title is required!"); 
     } else if (addDesc.getText().toString().trim().equals("")) { 
      addDesc.setError(" Postion is required!"); 
     } 

     Toast.makeText(getContext(),"your data is saved", Toast.LENGTH_SHORT).show(); 
     insert(); 
    } 

に追加ボタン、これはヘルパークラスの函方法

public List<ToDoModule> getDataFromDB(){ 
    List<ToDoModule> modelList = new ArrayList<ToDoModule>(); 
    String query = "select * from "+ TODO_TABLE; 
    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(query,null); 
    if (cursor.moveToFirst()){ 
     do { 

      ToDoModule model = new ToDoModule(); 
      model.setActionTitle(cursor.getString(1)); 
      model.setActionDesc(cursor.getString(2)); 
      modelList.add(model); 
     }while (cursor.moveToNext()); 
    } 
    return modelList; 
} 

であり、これは主な活動

答えて

0
public class MainActivity extends AppCompatActivity { 
public List<ToDoModule> dbList; 
RecyclerView mRecyclerView; 
DatabaseHelpher helpher; 
private RecyclerView.Adapter mAdapter; 
private RecyclerView.LayoutManager mLayoutManager; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    getSupportActionBar().hide(); 
    helpher = new DatabaseHelpher(this); 
    dbList= new ArrayList<ToDoModule>(); 
    dbList = helpher.getDataFromDB(); 
    mRecyclerView = (RecyclerView)findViewById(R.id.AppRecyclerView); 
    mRecyclerView.setHasFixedSize(true); 
    mLayoutManager = new LinearLayoutManager(this); 
    mRecyclerView.setLayoutManager(mLayoutManager); 
    mAdapter = new RecyclerAdapter(this,dbList); 
    this.dbList =helpher.getDataFromDB(); 
    mAdapter.notifyDataSetChanged(); 
    mRecyclerView.setAdapter(mAdapter); 
    FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
    fab.setImageResource(R.drawable.ic_action_name); 
    fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      FragmentManager fm = getSupportFragmentManager(); 
      addAction add = new addAction(); 
      add.show(fm,"fragment_edit_name"); 
     }});} 

@Override 
protected void onResume() { 
    super.onResume(); 
} 
} 

DialogFragmentsであり、すべてのフラグメントと同様に、それらを使用するアクティビティのライフサイクルに直接結びついています。したがって、onResume()コールバックは、ユーザーがdialogFragmentを閉じるとアクティビティによって呼び出されません。シンプルで簡単な保守のために

、私はインターフェース、あなたの活動は

コールバックたび、ユーザーの終了を受け
public class MainActivity extends AppCompatActivity implements DialogFragUpdateListener{ 

を実装します

public interface DialogFragUpdateListener { 
    public void OnDBUpdate(); 
} 

を作成しますあなたがDialogFragmentで行うアクションです。次に、あなたの活動に、このコールバックメソッドはそれらをデータベースから更新されたデータを照会し、アダプタを更新することができ

(DialogFragUpdateListener)getActivity()).OnDBUpdate() 

:私は挿入した後、あなたののonClick()メソッド()が呼び出されるでこれを追加します/ recyclerview再び:参照用

public void OnDBUpdate() { 
     // Requery data from database here 
    getDataFromDB(); 
    } 

チェックこのアウト: https://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity

+0

はこれがあなたのために働いていた場合、私に教えてください。 – RustWebDev

+1

私はこの問題を解決する男ありがとう –

関連する問題