2016-09-23 2 views
2

У меня есть RecyclerView с фрагментом диалога, и я получаю данные от пользователя через Dialog и сохраняю его в базе данных, тогда я показываю его в recyclerview, и все это работает, моя проблема в том, когда я добавляю данные, я должен перезапустить приложение, чтобы отобразить его в recycler, как я могу уведомить данные адаптера?уведомлять адаптер RecyclerView от фрагмента

кнопку добавить в Dialog Фрагмент

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(); 
    } 

и это метод GetData в вспомогательном классе

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; 
} 

и это является основным видом деятельности

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(); 
} 
} 

ответ

0

DialogFragments, как и все фрагменты, напрямую связаны с жизненным циклом Activity, который их использует. Поэтому обратный вызов onResume() не вызывается активностью после того, как пользователь отклоняет диалоговое окно.

Для простоты и легкости сопровождения, я бы создать интерфейс ,

public interface DialogFragUpdateListener { 
    public void OnDBUpdate(); 
} 

которой ваша деятельность будет реализовать,

public class MainActivity extends AppCompatActivity implements DialogFragUpdateListener{ 

, который получает обратного вызова всякий раз, когда заканчивает пользователем действие, которое вы им выполняете, в диалоговом окне «Диалог». Я хотел бы добавить это в OnClick() метода после вставки() называется:

(DialogFragUpdateListener)getActivity()).OnDBUpdate() 

Тогда в вашей деятельности, этот метод обратного вызова может их запросить обновленные данные из базы данных и обновления адаптера/recyclerview снова:

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

Проверить это для справки: https://developer.android.com/guide/components/fragments.html#CommunicatingWithActivity

+0

Позвольте мне знать, если это работает для вас. – RustWebDev

+1

спасибо, я решаю эту проблему –

Смежные вопросы