2017-04-20 4 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

können Sie Textview in Snackbar.make verwenden (Textansicht, "Download Complete", Snackbar.LENGTH_LONG); –

+0

Sie müssen die Ansicht hinzufügen http://www.androidhive.info/2015/09/android-material-design-snackbar-example/ http://www.truiton.com/2015/06/ android-snackbar-example/ –

+0

Einmal im Snackbar Parameter veröffentlichen. –

Antwort

0

Das erste Argument zu Snackbar.make() ist das Layout, in dem Sie die Snackbar anzeigen müssen. Normalerweise verwendet jeder das übergeordnete Layout der Aktivität oder des Fragments, um beispielsweise die Snackbar am unteren Bildschirmrand anzuzeigen.

Was Sie tun sollten, ist ein Objekt des übergeordneten Layouts des Bildschirms zu erstellen, in dem Sie die Snackbar anzeigen und als erstes Argument angeben möchten.

+1

Er wollte wissen, wie man es bekommt. Ich habe es tatsächlich in meiner Antwort angegeben. – creativecreatorormaybenot

0

Sie benötigen eine rootView in Ihrer Klasse.

private View rootView; 

Sie übergeben diese rootView als Argument in Ihrem Konstruktor.

public MyTask(View rootView) { 

    this.rootView = rootView; 

} 

In Ihrer Telefon Aktivität benötigen Sie einen rootView passieren. Dies kann eine beliebige sein View, in einem Fragment wird es normalerweise bereits rootView genannt und sonst würden Sie einfach Ihr Eltern-Layout setzen.

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

Dann in Ihrem postExecute() können Sie verwenden, dass rootView wie folgt aus:

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

Whole-Code für Ihren Fall:

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

Erstens eine ID mit der Basis-Layout geben. Hier ist meine main_activity.xml

<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"> 

gab ich die ID als layoutxx

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

Wenn AsyncTask auf einer anderen Datei, die Sie benötigen um die Ansicht durch den Konstruktor zu übergeben. In diesem Fall müssen Sie den Konstruktor nicht übergeben.

Verwandte Themen