如何解决在 searhview 方法中使用时 initloader 出错
当我在 searchview onQueryChange() 中使用加载器管理器时,我遇到了这个错误。
loaderManager.initLoader(1,null,this).forceLoad();
当我在 inCreate() 中使用此代码时,我没有收到错误。
import android.app.LoaderManager;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.Intent;
import android.content.Loader;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.SearchView;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.List;
public class MainActivity extends AppCompatActivity implements LoaderCallbacks<List<Book>> {
private final String urldata = "https://www.googleapis.com/books/v1/volumes?q=";
private String url;
private TextView textView;
private SearchView searchView;
private ListView listView;
private BookAdapter adapter;
public static final String LOG_TAG = Book.class.getName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
init();
adapter = new BookAdapter(this,new ArrayList<Book>());
listView.setAdapter(adapter);
LoaderManager loaderManager = getLoaderManager();
// perform set on query text listener event
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener(){
@Override
public boolean onQueryTextSubmit(String query) {
if (query != null) {
url = urldata + query;
}
loaderManager.initLoader(1,this).forceLoad();
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
if (newText != null) {
adapter.clear();
}
return false;
}
});
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,View view,int position,long id) {
Book currentEarthquake = (Book) adapter.getItem(position);
String url = currentEarthquake.getUrl();
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
}
});
}
private void init() {
textView = findViewById(R.id.textview);
listView = findViewById(R.id.list);
searchView = findViewById(R.id.search);
}
@Override
public Loader<List<Book>> onCreateLoader(int i,Bundle bundle) {
// Create a new loader for the given URL
return new BookLoader(this,url);
}
@Override
public void onLoadFinished(Loader<List<Book>> loader,List<Book> data) {
adapter.clear();
if (data != null && !data.isEmpty()) {
adapter.addAll(data);
}
}
@Override
public void onLoaderReset(Loader<List<Book>> loader) {
adapter.clear();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。