2017-04-20 1 views
0
public class MyTask extends AsyncTask<Void, Integer, String> { 

@Override 
protected void onPostExecute(String result) { 

    textView.setText(result); 
    button.setEnabled(true); 

    progressDialog.hide(); 

    Snackbar snackbar; 
    snackbar = Snackbar.make(/*what would i use here*/,"Download Complete", Snackbar.LENGTH_LONG); 
    snackbar.show(); 
    } 
} 
+0

Snackbar.make (textview, "다운로드 완료", Snackbar.LENGTH_LONG)에서 textview를 사용할 수 있습니다. –

+0

보기를 추가해야합니다. http://www.androidhive.info/2015/09/android-material-design-snackbar-example/ http://www.truiton.com/2015/06/ android-snackbar-example/ –

+0

snackbar 매개 변수를 공개합니다. –

답변

0

Snackbar.make()의 첫 번째 인수는 스낵바를 표시해야하는 레이아웃입니다. 일반적으로 모든 사람이 화면 하단에 스낵바를 표시하는 등 활동 또는 단편의 상위 레이아웃을 사용합니다.

당신이해야 할 일은 스낵바를 표시하고 첫 번째 인수로 제공하려는 화면의 상위 레이아웃 객체를 만드는 것입니다.

+1

그는 그것을 얻는 방법을 알고 싶었습니다. 나는 실제로 내 대답에 그것을 제공했습니다. – creativecreatorormaybenot

0

수업에 rootView이 필요합니다.

private View rootView; 

당신은 생성자의 인수로이 rootView을 전달합니다. 당신의 전화 활동에

public MyTask(View rootView) { 

    this.rootView = rootView; 

} 

당신은 rootView을 통과해야합니다. 이것은 View 일 수 있으며, 일반적으로 이미 rootView이라고 불리는 부분에 있습니다. 그렇지 않으면 부모 레이아웃을 넣을 수 있습니다.

new AsyncTask(rootView).execute(); // execute() for starting your AsyncTask 

그런 다음에 postExecute() 당신이 rootView 같은 것을 사용할 수 있습니다 : 귀하의 경우에 대한

Snackbar.make(rootView, "a text", Snackbar.LENGTH_LONG).show(); 

전체 코드 :

첫째
public class MyTask extends AsyncTask<Void, Integer, String> { 

    private View rootView; 

    public MyTask(View rootView) { 

     this.rootView = rootView; 
    } 

    @Override 
    protected void onPostExecute(String result) { 

     textView.setText(result); 
     button.setEnabled(true); 

     progressDialog.hide(); 

     Snackbar snackbar; 
     snackbar = Snackbar.make(rootView, "Download Complete", Snackbar.LENGTH_LONG); 
     snackbar.show(); 
    } 
} 
0

는 기본 레이아웃에 ID를 제공합니다. 여기에 내가 layoutxx

으로 ID를 준

<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:id="@+id/layoutxx" 
tools:context="pzy64.aaa.MainActivity"> 

내 main_activity.xml입니다 AsyncTask를 당신이해야 할 수도 있습니다 다른 파일에있는 경우이 내 MainActivity.java

public class MainActivity extends AppCompatActivity { 
    ConstraintLayout layout; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    l = (ConstraintLayout)findViewById(R.id.layoutxx); 
    new Test().execute(); 

} 
class Test extends AsyncTask<Void,Void,Void> { 
    @Override 
    protected Void doInBackground(Void... params) { 
     return null; 
    } 
    @Override 
    protected void onPostExecute(Void aVoid) { 
     super.onPostExecute(aVoid); 
     Snackbar.make(layout,"Hello",Snackbar.LENGTH_SHORT).show(); 
    } 
} 
} 

입니다 생성자를 통해 뷰를 전달합니다. 이 경우 생성자를 통해 전달할 필요가 없습니다.

관련 문제