2017-05-19 3 views
2

콜백시 텍스트보기에서 내용을 새로 고치려고합니다.콜백시 Android textview 내용이 새로 고침되지 않습니다.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.activity_expense,container,false); 
    total = 0; 
    // some logic to get the total 
    txtTotal.setText(String.valueOf(total)); 
    return v; 
} 

내가 클릭 버튼이 두 번째 조각에 갈 때 다시 전화를 설정 첫번째 조각에서 :

다음
// set call back 
addFragment.setTransactionListCallBack(ExpenseActivity.this); 

마무리 업데이트 및에 검색 내 onCreateView()에서 나는 첫번째 조각을로드 할 때

if(mcallback != null){ 
    mcallback.callback(GetMonthlyTransactionAsyncTask.allTransaction); 
} 

가 그럼 난 데이터베이스에 일부 삽입을 수행하지만 난 데이터를 다시 끌어하고 반환하기 전에 내가 일 다시 전달합니다 : 두 번째 조각 비동기 작업을 사용하여, 나는 업데이트 된 결과를 다시 전달 전자가 업데이트되었습니다. 첫번째 조각 내 콜백 :

@Override 
public void callback(ArrayList<Transaction> list) 
{ 
    // logic to sum up the total 
    Log.d("UPDATED TOTAL", String.valueOf(total)); 
    txtTotal.setText(String.valueOf(total)); 
} 

다시 완벽하게 내가 확인하는 로그를 인쇄 않았다대로 작동 호출은 (onCreateView 내부) 및 업데이트 (콜백 내부) 후 갱신하기 전에, 인쇄 값이 올바른지 . 그래서 코드를 보여줄 필요가 없다고 생각합니다.

지금 문제는 첫 번째 조각에 콜백 내에서 로그에 인쇄 된 업데이트 된 값이 업데이트 된 것이지 텍스트 뷰에 표시된 내용이 아닙니다. 텍스트보기에는 여전히 이전 값이 붙어 있습니다.

콜백시 textview 콘텐츠를 새로 고치는 방법에 대한 아이디어가 있으십니까?

+0

더 많은 코드를 게시하십시오. 더 많은 수업을 보지 않으면 도움이되지 않습니다. 예를 들어, total의 값을 어디에서 변경하고 있습니까? – parkgrrr

+0

@parkgrrr 방금 편집 한 코드의 세 번째 블록에 있습니다. 콜백은 완벽하게 작동하며 첫 번째 단편에서 콜백 내부에 올바른 값을 출력 할 수 있기 때문에 아무런 문제가 없습니다. 문제는 지금 textview 여전히 오래된 값으로 붙어있다 – guest176969

답변

-1

당신은 AsyncTask를가 관련된 경우 다른 스레드에서 텍스트 뷰를 설정하려고 할 수있다, UI 스레드에서 텍스트보기를 설정하려고 :

runOnUiThread(new Runnable() { 
      @Override 
       public void run() { 
        txtTotal.setText(String.valueOf(total)); 
     } 
    }); 

편집 : 텍스트를 설정 한 후도 txtTotal.invalidate()을 시도합니다.

+0

그래서이 코드를 콜백 안에 넣어 또는? – guest176969

+0

예, 로그 진술 바로 뒤에 있습니다. – parkgrrr

+0

아니, textview 여전히 이전 값으로 붙어있다. 그러나 인쇄 된 로그에 업데이트 값이 표시됩니다. ( – guest176969

0

invalidate()은 UI 스레드에서 호출해야합니다. 비 UI 스레드에서 호출하려면, 동일한 ID를 가진 텍스트 뷰가 있는지

@Override 
public void callback(ArrayList<Transaction> list) 
{ 
    // logic to sum up the total 
    Log.d("UPDATED TOTAL", String.valueOf(total)); 
    txtTotal.setText(String.valueOf(total)); 
    txtTotal.postInvalidate(); 
} 

postInvalidate()가 또한 확인 부른다.