2015-05-28 21 views
8

Tôi có Hoạt động chính của mình với một đoạn, trong đó có một Recyclerview retreaving tất cả các dữ liệu dân cư từ cơ sở dữ liệu. Trong đoạn này, tôi có một nút gọi một hoạt động khác để chèn một đối tượng vào cơ sở dữ liệu.Làm mới Recyclerview từ Hoạt động

Sự cố là khi Hoạt động kết thúc và quay lại Hoạt động chính Recyclerview không hiển thị mục mới mà tôi vừa tạo. Tôi đã thử với đoạn mã này:

@Override 
    public void onResume() { 
      super.onResume(); 
      adapterItem.addItem(MyApplication.getWritableDatabase().getAllItems()); 
      listProjectsView.scrollToPosition(0); 
     } 

Hàm getAllItems lấy tất cả dữ liệu từ sqlite.

On adapterItem tôi từ Recyclerview của tôi, tôi nhận điều này:

public void addItem(ArrayList<Item> listItems) { 
     this.listItems = listItems; 
     notifyItemInserted(0); 
    } 

Nó hoạt động "tốt". Vấn đề chính là khi tôi chuyển sang ứng dụng khác đang chạy trên thiết bị di động và tôi quay lại ứng dụng đã phát triển của mình, phương pháp onResume bật và hiển thị lại lần chèn cuối cùng của tôi, điền hai lần mục này (và cứ tiếp tục nếu tôi làm lại) .

Cảm ơn

+0

sử dụng onRestart insted của onResume –

+0

sử dụng phải thực hiện 'HashSet' đó sẽ loại trừ các yếu tố trùng lặp –

Trả lời

10

Vượt qua mục mới trở lại MainActivity, sau đó đối phó với nó cho mình.

1.In MainActivity, sử dụng startActivityForResult để bắt đầu Hoạt động thứ hai, như thế này:

startActivityForResult(new Intent(this, SecondActivity.class), REQUEST_CODE); 

REQUEST_CODE là một int.

2.In Hoạt động thứ hai, ghi đè finish như thế này:

@Override 
public void finish() { 
    Intent returnIntent = new Intent(); 
    returnIntent.putExtra("passed_item", itemYouJustCreated); 
    // setResult(RESULT_OK); 
    setResult(RESULT_OK, returnIntent); //By not passing the intent in the result, the calling activity will get null data. 
    super.finish(); 
} 

3.In MainActivity, ghi đè onActivityResult như thế này:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) { 
     YourItem passedItem = data.getExtras().get("passed_item"); 
     // deal with the item yourself 

    } 
} 
+0

recyclerview nhấp vào sự kiện là trong bộ điều hợp của RecyclerView, không phải trong MainActivity, vì vậy làm thế nào tôi có thể nhận được cho điều đó? –

+0

Cảm ơn bạn đã chấp nhận chỉnh sửa của tôi Wesley và cảm ơn vì câu trả lời của bạn, bạn đã giúp rất nhiều cho dự án tôi đang làm việc trên :) –

+0

@LucasP. Không có gì – Wesley

0

Hãy thử Như thế này,

Intent intent = new Intent(Context, YourClass); 
startActivityForResult(intent, ADD_ITEM); 

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode == Activity.RESULT_OK) { 
     if (requestCode == ADD_ITEM){ 
      adapterItem.addItem(MyApplication.getWritableDatabase().getAllItems()); 
      listProjectsView.scrollToPosition(0); 
     } 
    }  
} 

hy vọng nó sẽ làm việc cho bạn

+0

tôi đã cố gắng này một lần nhưng tôi đã không có thể có được các hình ảnh động thêm để hiển thị cho recyclerview - tôi đoán nó thêm nó trước khi hoạt động trở nên hoàn toàn có thể nhìn thấy. Bạn có biết làm thế nào tôi có thể thêm một mục từ một hoạt động khác và có bổ sung được hoạt hình trên recyclerview khi tôi điều hướng trở lại myactivity của tôi? – Simon

1

câu trả lời của Wesley là rất tốt nhưng có một lỗ hổng. Dữ liệu được trả lại là hoạt động thứ hai là null và kể từ khi chỉnh sửa của tôi bị từ chối, dưới đây là cách chuyển dữ liệu trở lại hoạt động của người gọi. Làm mọi thứ Wesley nói nhưng khi bạn tạo returnIntent thêm nó vào setResult như thế này:

@Override 
public void finish() { 
    Intent returnIntent = new Intent(); 
    returnIntent.putExtra("passed_item", itemYouJustCreated); 
    // setResult(RESULT_OK); 
    setResult(RESULT_OK, returnIntent); //By not passing the intent in the result, the calling activity will get null data. 
    super.finish(); 
} 
Các vấn đề liên quan