2017-10-25 1 views
0

Ich bin lose folgen einem Leitfaden, aber ich verwende einen onClickListener, um den Suchvorgang zu starten. Ich bin dabei, einen Loader zu implementieren:Die Verwendung von 'this' in getSupportLoaderManager() gibt mir eine Fehlermeldung

getSupportLoaderManager(). RestartLoader (0, queryBundle, this);

aber wenn ich setzen in ‚this‘ es bringt die folgende Meldung:

Wrong 3. Argument Typ. Gefunden: 'android.view.View.OnClickListener', erforderlich: 'android.support.v4.app.LoaderManager. LoaderCallbacks '

Ich habe es verabscheut, von einem onClickListener zu einer onClick-Methode zu wechseln, wie im Leitfaden vorgeschlagen, gibt es eine Möglichkeit, den Loader im onClickListener zu implementieren?

Der Code ist unten:

import android.content.Context; 
import android.net.ConnectivityManager; 
import android.net.NetworkInfo; 
import android.app.LoaderManager; 
import android.app.LoaderManager.LoaderCallbacks; 
import android.content.Loader; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.inputmethod.InputMethodManager; 
import android.widget.AdapterView; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.Toast; 

import java.io.IOException; 
import java.util.ArrayList; 
import java.util.List; 

public class GoogleBookActivity extends AppCompatActivity implements 
LoaderManager.LoaderCallbacks<String>{ 

private static final String TAG = GoogleBookActivity.class.getSimpleName(); 
private EditText mEditText; 
private BookAdapter mAdapter; 
private Button bookSearch; 
private TextView mTitle, mAuthor; 

//URL link to the API 
private static final String GOOGLE_BOOKS_REQUEST_URL = "https://www.googleapis.com/books/v1/volumes?q="; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_google_book); 

    mTitle = (TextView) findViewById(R.id.book_title); 
    mAuthor = (TextView) findViewById(R.id.book_author); 
    bookSearch = (Button) findViewById(R.id.searchbutton); 
    mEditText = (EditText) findViewById(R.id.search_text); 




    bookSearch.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 

      //Initialise String queryText 
      String queryText = mEditText.getText().toString(); 

      //For Hiding the keyboard when the search button is clicked 
      InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); 
      inputManager.hideSoftInputFromInputMethod(getCurrentFocus().getWindowToken(),InputMethodManager.HIDE_NOT_ALWAYS); 

      //For Checking the network status and empty search field case 
      ConnectivityManager connMgr = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 
      NetworkInfo networkInfo = connMgr.getActiveNetworkInfo(); 

      if(networkInfo !=null && networkInfo.isConnected() && queryText.length()!=0){ 
       //new FetchBook(mTitle, mAuthor).execute(queryText); 
      } 

      Log.i(TAG, "Searched " + queryText); 
      if(queryText.length() != 0){ 
       new FetchBook(mTitle, mAuthor).execute(queryText); 
       mAuthor.setText(""); 
       mTitle.setText(R.string.loading); 
       //We replace the call to execute the fetchbook task with a call to restartLoader(), passing in 
       // the querystring you get from the EditText in the Bundle. 
       Bundle queryBundle = new Bundle(); 
       queryBundle.putString("queryText", queryText); 
       getSupportLoaderManager().restartLoader(0,queryBundle,this); 

      }else { 
       if(queryText.length() == 0){ 
        mAuthor.setText(""); 
        mTitle.setText("Please enter a search term."); 
       }else{ 
        mAuthor.setText(""); 
        mTitle.setText("Please check your network connection and try again."); 
       } 
      } 
     } 
    }); 


} 


@Override 
public Loader<String> onCreateLoader(int i, Bundle bundle) { 
    return null; 
} 

@Override 
public void onLoadFinished(Loader<String> loader, String s) { 

} 

@Override 
public void onLoaderReset(Loader<String> loader) { 

    } 
} 

Antwort

2

this auf das bezieht sich Einkapseln OnClickListener:

bookSearch.setOnClickListener(new View.OnClickListener() { 

    @Override 
    public void onClick(View view) { 
     // You are now inside an anonymous class extending from 
     // OnClickListener. 'this' now refers to this very instance 
     // of the OnClickListener 
    } 
}); 

Um zum Einkapseln GoogleBookActivity zu beziehen, geben genau das Klassennamen vor:

getSupportLoaderManager().restartLoader(0, queryBundle, GoogleBookActivity.this); 
+0

Es gibt mir immer noch den gleichen Fehler: - | – Ropenfold

+0

@Ropenfold Sagt es immer noch "Found: 'android.view.View.OnClickListener'"? Dann versuche dein Projekt zu säubern und zu bauen. –

Verwandte Themen