我的应用程序在Android 6上崩溃,
调用NotifyDataSetChanged()
时,我正在使用带有自定义适配器RecycerView
的改型:方法不工作RecycerView
public class AnswersAdapter extends RecyclerView.Adapter<AnswersAdapter.ViewHolder> {
private List<Item> mItems;
private Context mContext;
private PostItemListener mItemListener;
public class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView titleTv;
PostItemListener mItemListener;
public ViewHolder(View itemView, PostItemListener postItemListener) {
super(itemView);
titleTv = itemView.findViewById(android.R.id.text1);
this.mItemListener = postItemListener;
itemView.setOnClickListener(this);
}
@Override
public void onClick(View view) {
Item item = getItem(getAdapterPosition());
this.mItemListener.onPostClick(item.getAnswerId());
notifyDataSetChanged();
}
}
public AnswersAdapter(Context context, List<Item> posts, PostItemListener itemListener) {
mItems = posts;
mContext = context;
mItemListener = itemListener;
}
@Override
public AnswersAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
Context context = parent.getContext();
LayoutInflater inflater = LayoutInflater.from(context);
View postView = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
ViewHolder viewHolder = new ViewHolder(postView, this.mItemListener);
return viewHolder;
}
@Override
public void onBindViewHolder(AnswersAdapter.ViewHolder holder, int position) {
Item item = mItems.get(position);
TextView textView = holder.titleTv;
textView.setText(item.getOwner().getDisplayName());
}
@Override
public int getItemCount() {
return mItems.size();
}
public void updateAnswers(List<Item> items) {
mItems.clear();
mItems.addAll(items);
this.notifyDataSetChanged();
}
private Item getItem(int adapterPosition) {
return mItems.get(adapterPosition);
}
public interface PostItemListener {
void onPostClick(long id);
}
}
public class MainActivity extends AppCompatActivity {
private AnswersAdapter mAdapter;
private SOService mService;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mService = ApiUtils.getSOService();
RecyclerView mRecyclerView = findViewById(R.id.rvawnser);
mAdapter = new AnswersAdapter(this, new ArrayList<Item>(0),
new AnswersAdapter.PostItemListener() {
@Override
public void onPostClick(long id) {
Toast.makeText(MainActivity.this, "Post id is" + id, Toast.LENGTH_SHORT).show();
}
});
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(this);
mRecyclerView.setLayoutManager(layoutManager);
mRecyclerView.setAdapter(mAdapter);
mRecyclerView.setHasFixedSize(true);
RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(this, DividerItemDecoration.VERTICAL);
mRecyclerView.addItemDecoration(itemDecoration);
loadAnswers();
}
public void loadAnswers() {
mService.getAnswers().subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<SOAnswersResponse>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(SOAnswersResponse soAnswersResponse) {
mAdapter.updateAnswers(soAnswersResponse.getItems());
}
});
}
private void showErrorMessage() {
Toast.makeText(getApplicationContext(), "MainActivity: error loading from API", Toast.LENGTH_LONG).show();
}
mAdapter.updateAnswers(soAnswersResponse.getItems());
apply plugin: 'com.android.application'
android {
compileSdkVersion 26
buildToolsVersion '26.0.2'
defaultConfig {
applicationId "com.example.masoudmk.myapplication"
minSdkVersion 15
targetSdkVersion 26
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
//noinspection GradleCompatible
compile 'com.android.support:appcompat-v7:26.0.2'
compile 'com.android.support.constraint:constraint-layout:1.0.2'
compile 'com.android.support:support-v4:26.0.2'
//noinspection GradleCompatible
compile 'com.android.support:support-v13:26.0.2'
// Retrofit
compile 'com.squareup.retrofit2:retrofit:2.3.0'
compile 'com.squareup.okhttp:okhttp:2.4.0'
// JSON Parsing
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.squareup.retrofit2:converter-gson:2.3.0'
enter code here
//noinspection GradleCompatible
compile 'com.android.support:recyclerview-v7:26.0.2'
testCompile 'junit:junit:4.12'
compile 'io.reactivex:rxjava:1.1.6'
compile 'io.reactivex:rxandroid:1.2.1'
compile 'com.squareup.retrofit2:adapter-rxjava:2.1.0'
}
问题出在哪里?
按以下方式更改分级:
buildToolsVersion "27.0.3"
而且
dependencies {
...
compile 'com.android.support:support-v4:27.0.0'
compile 'com.android.support:appcompat-v7:27.0.0'
compile 'com.android.support:recyclerview-v7:27.0.0'
compile 'com.android.support:support-v13:27.0.0'
...
}
问题内容: 以下代码可在实时站点上运行,但无法在jsfiddle站点上运行。 谁能告诉我为什么它在jsfiddle上不起作用? 在控制台上,它记录:和。 您将代码作为片段嵌入此处时,可以看到该代码的工作原理: 问题答案: 您定义的函数是在onload函数中定义的,因此在它们被引用之前,因为它们是在该函数中定义的,所以只能在该函数中引用它们。您在HTML中将它们称为全局变量。您有三种选择 a)(最简
问题内容: 我在Windows上有一个基本的webserver hello world应用程序,可用于Windows上的nodejs,它可在localhost上运行。但是,当我从互联网测试它时,它无法连接。我在netgear路由器中设置了端口转发。我是否在这里缺少使我的nodejs服务器对外界可见的步骤? 谢谢。 问题答案: 确保您聆听而不是 是仅对您的计算机可见的专用网络。 侦听所有接口,包括私
问题内容: 我正在尝试在Ubuntu终端上运行javac。但是我得到以下信息: JDK已经安装并运行说 我的jdk安装在/ usr / lib / jvm / java-6-open- jdk中;而且我能够从Eclipse编译并运行Java程序。但是在使用终端时遇到了上述问题。 问题答案: 该二进制(可能其他的Java二进制文件)是/不是您的用户环境变量。有几种解决方法: 添加到用户的环境变量。您
问题内容: 所以我最近一直在C9上使用Node.js,并在一个javascript文件中遇到了这个问题: 这是我的代码: 我更新了所有依赖关系以及Node本身,但仍然遇到此问题。有人知道怎么回事吗? 问题答案: 我面临着同样的问题。正在网上寻找解决方案。事实证明,jsdom自v10以来已更新了一些功能。因此,我想在快速应用程序的Node.js端使用jQuery,并且必须像下面这样进行操作: 从v1
根据Maven的发布历史,应该可以在JDK7上运行Maven的任何最新版本(在编写本文时)。但是,当我在Ubuntu21.04机器上尝试这样做时,我得到了一个错误:。 即使在不包含任何Java文件或文件的目录中运行而没有任何参数时也会发生这种情况。 Maven信息: (我还安装了Zulu1.7.292和OpenJDK;那里的行为是相同的。)