- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在我的应用程序中包含一个 SwipeRefreshLayout。它可以工作,但是当我关闭我的 WIFI 时(我的应用程序使用它,如果没有 wifi,我想包括警报)。任何人有任何建议为什么我得到这个空指针异常:
NullPointerException: Attempt to invoke virtual method 'boolean android.support.v7.widget.RecyclerView$LayoutManager.canScrollVertically()' on a null object reference
at android.support.v7.widget.RecyclerView.computeVerticalScrollOffset(RecyclerView.java:1540)
at android.view.View.canScrollVertically(View.java:13757)
at android.support.v4.view.ViewCompatICS.canScrollVertically(ViewCompatICS.java:35)
at android.support.v4.view.ViewCompat$ICSViewCompatImpl.canScrollVertically(ViewCompat.java:1161)
at android.support.v4.view.ViewCompat.canScrollVertically(ViewCompat.java:1575)
at android.support.v4.widget.SwipeRefreshLayout.canChildScrollUp(SwipeRefreshLayout.java:643)
at android.support.v4.widget.SwipeRefreshLayout.onInterceptTouchEvent(SwipeRefreshLayout.java:657)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2108)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2197)
我必须指出,在我的应用程序中添加 SwipeFredreshLayput 之前,我没有遇到这样的问题。
这是我的 XML:Hourly_Fragment:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:background="@drawable/bg_gradient"
tools:context="koemdzhiev.com.stormy.ui.HourlyForecastActivity">
<android.support.v4.widget.SwipeRefreshLayout
android:id="@+id/hourly_swipe_refresh_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<android.support.v7.widget.RecyclerView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:id="@+id/recyclerView"/>
</android.support.v4.widget.SwipeRefreshLayout>
</RelativeLayout>
这是我的 Hourly_fragment java 代码:
public class Hourly_forecast_fragment extends Fragment {
private Hour[] mHours;
private MainActivity mActivity;
@InjectView(R.id.hourly_swipe_refresh_layout)
SwipeRefreshLayout mSwipeRefreshLayout;
RecyclerView.LayoutManager layoutManager;
//inject the RecyclerView as member variable
@InjectView(R.id.recyclerView)
RecyclerView mRecyclerView;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mActivity = ((MainActivity) getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
View v =inflater.inflate(R.layout.hourly_forecast_fragment,container,false);
ButterKnife.inject(this, v);
mSwipeRefreshLayout.setColorSchemeColors(R.color.orange,R.color.green,R.color.blue);
if (mRecyclerView != null)
mSwipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
if (mActivity.isNetworkAvailable()) {
mActivity.getLocation();
} else {
mActivity.alertForNoInternet();
mSwipeRefreshLayout.setRefreshing(false);
}
}
});
Log.e("Forecast_fragment", "onCreateView");
return v;
}
public void setUpHourlyFragment(){
if (mActivity.mForecast != null) {
Hour[] hourlyForecast = mActivity.mForecast.getHourlyForecast();
mHours = Arrays.copyOf(hourlyForecast, hourlyForecast.length, Hour[].class);
HourAdapter adapter = new HourAdapter(mActivity, mHours);
mRecyclerView.setAdapter(adapter);
mRecyclerView.setHasFixedSize(true);
layoutManager = new LinearLayoutManager(mActivity);
mRecyclerView.setLayoutManager(layoutManager);
//if dealing with fixed size data, it is recommended to do the following...
mRecyclerView.setHasFixedSize(true);
}
}
}
主要 Activity 代码:
public class MainActivity extends AppCompatActivity {
ViewPager pager;
ViewPagerAdapter adapter;
SlidingTabLayout tabs;
CharSequence Titles[]={"Current","Hourly","Daily"};
int Numboftabs =3;
Current_forecast_fragment mCurrent_forecast_fragment;
Hourly_forecast_fragment mHourly_forecast_fragment;
Daily_forecast_fragment mDaily_forecast_fragment;
public static final String TAG = MainActivity.class.getSimpleName();
public static final String LOCATION_KEY = "location_key";
public Forecast mForecast;
public static final String DAILY_FORECAST = "DAILY_FORECAST";
public static final String HOURLY_FORECAST = "HOURLY_FORECAST";
//default coordinates - Gotse Delchev, UK Lati:57.156866 ; Long:
private double latitude = 41.5667;
private double longitude = 23.7333;
private LocationManager locationManager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//-----------MY CODE STARTS HERE-----------------
changeWindowTopColor();
this.mCurrent_forecast_fragment = new Current_forecast_fragment();
this.mHourly_forecast_fragment = new Hourly_forecast_fragment();
this.mDaily_forecast_fragment = new Daily_forecast_fragment();
getLocation();
// Creating The ViewPagerAdapter and Passing Fragment Manager, Titles fot the Tabs and Number Of Tabs.
adapter = new ViewPagerAdapter(getSupportFragmentManager(),Titles,Numboftabs,mCurrent_forecast_fragment,
mHourly_forecast_fragment,mDaily_forecast_fragment);
// Assigning ViewPager View and setting the adapter
pager = (ViewPager) findViewById(R.id.pager);
pager.setOffscreenPageLimit(3);
pager.setAdapter(adapter);
// Assiging the Sliding Tab Layout View
tabs = (SlidingTabLayout) findViewById(R.id.tabs);
tabs.setDistributeEvenly(true); // To make the Tabs Fixed set this true, This makes the tabs Space Evenly in Available width
// Setting Custom Color for the Scroll bar indicator of the Tab View
tabs.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return ContextCompat.getColor(MainActivity.this,R.color.tabsScrollColor);
}
});
// Setting the ViewPager For the SlidingTabsLayout
tabs.setViewPager(pager);
}
private void getForecast(double latitude, double longitude) {
if (isNetworkAvailable()) {
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder()
.url(forecast)
.build();
Call call = client.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Request request, IOException e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
mCurrent_forecast_fragment.toggleRefresh();
mHourly_forecast_fragment.mSwipeRefreshLayout.setRefreshing(false);
}
});
alertUserAboutError();
}
//when the call to the Okhttp library finishes, than calls this method:
@Override
public void onResponse(Response response) throws IOException {
runOnUiThread(new Runnable() {
@Override
public void run() {
mCurrent_forecast_fragment.toggleRefresh();
mHourly_forecast_fragment.mSwipeRefreshLayout.setRefreshing(false);
}
});
try {
String jsonData = response.body().string();
//Log.v(TAG, jsonData);
if (response.isSuccessful()) {
mForecast = parseForecastDetails(jsonData);
runOnUiThread(new Runnable() {
@Override
public void run() {
mCurrent_forecast_fragment.updateDisplay();
mHourly_forecast_fragment.setUpHourlyFragment();
mDaily_forecast_fragment.setUpDailyFragment();
}
});
} else {
alertUserAboutError();
}
} catch (IOException | JSONException e) {
Log.e(TAG, "Exception caught:", e);
}
}
});
} else {
mCurrent_forecast_fragment.toggleRefresh();
mHourly_forecast_fragment.mSwipeRefreshLayout.setRefreshing(false);
Toast.makeText(this,getString(R.string.network_unavailable_message), Toast.LENGTH_LONG).show();
alertForNoInternet();
}
}
public void alertForNoInternet() {
WIFIDialogFragment dialog = new WIFIDialogFragment();
dialog.show(getFragmentManager(), getString(R.string.error_dialog_text));
}
最佳答案
输入这些行:
layoutManager = new LinearLayoutManager(mActivity);
mRecyclerView.setLayoutManager(layoutManager);
在 onCreateView 这一行之后:
ButterKnife.inject(this, v);
您通常应该避免在没有附加 LayoutManager
的情况下使用 RecyclerView
,这会导致像这样的奇怪异常,因为大多数 RecyclerView
功能,甚至与绘图无关的功能都依赖于 LayoutManager
。然而,拥有一个没有 Adapter
的 RecyclerView
是完全没问题的(因为您确实已经拥有数据或其他任何东西)。但是你应该在创建 RecyclerView
之后尽快附加一个 LayoutManager
:-)
关于java - LayoutManager.canScrollVertically() 时出现空指针异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34307274/
根据谷歌的 RecyclerView documentation ,您可以通过在 RecyclerView 的“layoutManager”属性中指定其类名,从布局文件中设置特定的 LayoutMan
运行实例化此类的代码时: static final class MyFrame extends JFrame { private CardLayout layout = new CardLay
我有一个带有卡片列表的 RecyclerView。我想知道是否可以通过编程将 RecyclerView 的 LayoutManager 更改为 Linear(在使用手机时)和 StaggeredGri
我在尝试为我的 recyclerview 设置布局管理器时遇到此错误。我已经创建了一个布局管理器并设置了我的 recyclerview 来使用它。由于某种原因,layoumanager 为空。 jav
前段时间我读到这个article显示了一种在 Swing 中实现鼠标可调整大小的组件的方法。 作者使用空 LayoutManager 以允许绝对组件定位。我知道不应该使用 null 布局,所以我的问题
请看附图。我是 Java GUI 的初学者,希望有人能指导我为这样的 GUI 选择布局管理器。我知道我可能必须使用嵌套的布局管理器,但我不确定哪个可以帮助我完成这项工作。 最佳答案 这是一个想法: 在
我想像这样实现一个 ConcatAdapter : 此页面的 recyclerView 包含以下元素: 标题 水平recyclerView(带分页) 标题 垂直recyclerView(无分页) 标题
所以,我对 LayoutManager 完全陌生。我已经阅读过有关现有 LayoutManager 的信息,但没有了解最好的方法是获得这样的布局。不同的颜色框代表 JPanel。 我应该使用哪一个?
我正在学习在 GUI 中定位对象的不同方法,但我不太明白为什么需要转换为 LayoutManager 才能使用 setLayout 方法。是否需要实现 LayoutManager 接口(interfa
我正在尝试对 UITextView 的 layoutManager 进行子类化 但不断发生崩溃。我一直在看的示例是 Objective C 中的,所以我对如何更改布局管理器感到有点困惑 这是我的代码.
我正在开发一个应用程序,并且有一个需要自定义布局管理器的面板。为了测试我的 LayoutManager 实现,我希望内置一些 Debug模式,非常类似于 MigLayout 的 Debug模式,它在
我正在尝试在我的应用程序中包含一个 SwipeRefreshLayout。它可以工作,但是当我关闭我的 WIFI 时(我的应用程序使用它,如果没有 wifi,我想包括警报)。任何人有任何建议为什么我得
我有一段文字,它在屏幕上的显示完全像这样: #first SomePersonFirstName SomePersonLastName #secondTag 在我的应用程序中,我保留了有关此文本的 3
如何防止 GUI 组件在 BorderLayout 管理器中调整大小时缩小?是否可以设置最小尺寸以使组件不会缩小超过它?似乎使用 setBounds 不适用于布局管理器。 还有一个问题:如果我使用嵌套
我无法找到为什么我们需要为 RecycleView 设置 LayoutManager 的解释。有人可以解释吗? mLayoutManager = new LinearLayoutManager(thi
我正在尝试编译这个非常简单的 BoxLayout 管理器测试,但我不断收到此错误:“Container 类型中的方法 setLayout(LayoutManager) 不适用于我的行面板上的参数 (L
我想利用 JFrame 的 Container 的默认布局:LayoutManager,避免使用 专门化它>FlowLayout ¹. 所以我写了这段代码: LayoutManager layout_
我用这样的 StaggeredGridLayoutManager 制作了 RecyclerView: 我需要在上面添加一些 TextView(像 LinearLayoutManager 中的一个列)。
我正在尝试构建一个涉及 RecyclerView 或 GridView 的 UI,我想在其中根据动态填充的项目的数量和宽度自动设置列数。 这是我到目前为止所取得的成就的形象...... 这是我想要实现
我正在使用 RecyclerView 和 StaggeredGridLayoutManager。 我希望这个 StaggeredGridLayoutManager 或任何一个 LayoutManage
我是一名优秀的程序员,十分优秀!