- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在编写此代码以在 android 中拥有自定义列表。我正在使用
'com.android.support:support-v4:26.1.0'
我当前的代码试图显示包含图像和文本的 listview
,但我想这无关紧要。
FourthFragment.java
public class FourthFragment extends ListFragment {
private ArrayList<Weather> weatherProperties = new ArrayList<>();
@Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View myFragmentView = inflater.inflate(R.layout.fragment_fourth, container, false);
//create our property elements
weatherProperties.add(new Weather(10, "Smith Street", "Sydney", "NSW", "A large 3 bedroom apartment right in the heart of Sydney! A rare find, with 3 bedrooms and a secured car park.", 450.00, "property_image_1", 3, 1, 1));
weatherProperties.add(new Weather(66, "King Street", "Sydney", "NSW", "A fully furnished studio apartment overlooking the harbour. Minutes from the CBD and next to transport, this is a perfect set-up for city living.", 320.00, "property_image_2", 1, 1, 1));
weatherProperties.add(new Weather(1, "Liverpool Road", "Liverpool", "NSW", "A standard 3 bedroom house in the suburbs. With room for several cars and right next to shops this is perfect for new families.", 360.00, "property_image_3", 3, 2, 2));
weatherProperties.add(new Weather(567, "Sunny Street", "Gold Coast", "QLD", "Come and see this amazing studio apartment in the heart of the gold coast, featuring stunning waterfront views.", 360.00, "property_image_4" , 1, 1, 1));
TextView tv = (TextView) myFragmentView.findViewById(R.id.bedroom);
tv.setText("My Header");
// setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,names));
// New Array Adapters
ArrayAdapter<Weather> adapter = new weatherArrayAdapter(getContext(), 0, weatherProperties);
//Find list view and bind it with the custom adapter
ListView listView = (ListView) tv.findViewById(R.id.customListView);
listView.setAdapter(adapter);
return myFragmentView;
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
// on click display the item in toast
Toast.makeText(getActivity(), (String)l.getItemAtPosition(position), Toast.LENGTH_SHORT).show();
}
static FourthFragment newInstance(int num) {
FourthFragment fourthFragment = new FourthFragment();
Bundle args = new Bundle();
args.putInt("num", num);
fourthFragment.setArguments(args);
return fourthFragment;
}
//custom ArrayAdapater
class weatherArrayAdapter extends ArrayAdapter<Weather>{
private Context context;
private List<Weather> weatherProperties;
//constructor, call on creation
public weatherArrayAdapter(Context context, int resource, ArrayList<Weather> objects) {
super(context, resource, objects);
this.context = context;
this.weatherProperties = objects;
}
//called when rendering the list
public View getView(int position, View convertView, ViewGroup parent) {
//get the weather we are displaying
Weather weather = weatherProperties.get(position);
//get the inflater and inflate the XML layout for each item
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
//conditionally inflate either standard or special template
View view;
view = inflater.inflate(R.layout.weather_layout, null);
TextView description = (TextView) view.findViewById(R.id.description);
TextView address = (TextView) view.findViewById(R.id.address);
TextView bedroom = (TextView) view.findViewById(R.id.bedroom);
TextView bathroom = (TextView) view.findViewById(R.id.bathroom);
TextView carspot = (TextView) view.findViewById(R.id.carspot);
TextView price = (TextView) view.findViewById(R.id.price);
ImageView image = (ImageView) view.findViewById(R.id.image);
//set address and description
String completeAddress = weather.getStreetNumber() + " " + weather.getStreetName() + ", " + weather.getSuburb() + ", " + weather.getState();
address.setText(completeAddress);
//display trimmed excerpt for description
int descriptionLength = weather.getDescription().length();
if(descriptionLength >= 100){
String descriptionTrim = weather.getDescription().substring(0, 100) + "...";
description.setText(descriptionTrim);
}else{
description.setText(weather.getDescription());
}
//set price and weather attributes
price.setText("$" + String.valueOf(weather.getPrice()));
bedroom.setText("Bed: " + String.valueOf(weather.getBedrooms()));
bathroom.setText("Bath: " + String.valueOf(weather.getBathrooms()));
carspot.setText("Car: " + String.valueOf(weather.getCarspots()));
//get the image associated with this weather
int imageID = context.getResources().getIdentifier(weather.getImage(), "drawable", context.getPackageName());
image.setImageResource(imageID);
return view;
}
}
}
没有 compiletime
错误,但这给了我 runtime
错误
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
at com.example.phocast.FourthFragment.onCreateView(FourthFragment.java:39)
at android.support.v4.app.Fragment.performCreateView(Fragment.java:2354)
我做错了什么?
如果你能把问题告诉我,我将不胜感激。
回答和评论后更新
错误在这里:(很抱歉把它作为引用,否则不允许我提交主要是代码错误
)
TextView tv = (TextView) myFragmentView.findViewById(R.id.bedroom);
tv.setText("My Header");
xml
是:
weather_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="10dp"
android:paddingBottom="10dp">
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="100dp"
android:layout_marginRight="10dp"
android:contentDescription="Property Image" />
<LinearLayout
android:id="@+id/infoSection"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/image"
android:orientation="vertical">
<TextView
android:id="@+id/address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="Street Address"
android:textSize="18sp" />
<TextView
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="Description"
android:textSize="15sp" />
</LinearLayout>
<RelativeLayout
android:id="@+id/pricingSection"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/infoSection"
android:orientation="vertical">
<TextView
android:id="@+id/price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="Price" />
<TextView
android:id="@+id/bedroom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/price"
android:layout_marginRight="15dp"
android:text="Bed:" />
<TextView
android:id="@+id/bathroom"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/price"
android:layout_marginRight="15dp"
android:layout_toRightOf="@id/bedroom"
android:text="Bath:" />
<TextView
android:id="@+id/carspot"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/price"
android:layout_marginRight="15dp"
android:layout_toRightOf="@id/bathroom"
android:text="Car:" />
</RelativeLayout>
</RelativeLayout>
更新 2:fragment_four.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/colorPrimaryLight">
<ListView
android:id="@+id/customListView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_alignParentStart="true"
android:scrollbars="vertical"
android:textAlignment="gravity">
</ListView>
</RelativeLayout>
更新 3所以,我创建了一个 fourth_fragment.xml 作为:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/colorPrimaryLight">
<TextView
android:id="@+id/textView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="10dp"
android:text="Description"
android:textSize="15sp" />
<ListView
android:id="@+id/customListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_centerHorizontal="true"
android:scrollbars="vertical"
android:textAlignment="gravity"></ListView>
</LinearLayout>
并更改了行:
tv = (TextView) myFragmentView.findViewById(R.id.textView);
tv.setText("My Header");
但我仍然收到错误:
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ListView.setAdapter(android.widget.ListAdapter)' on a null object reference
最佳答案
您将获得 null
在这里。检查你是否有TextView id
= bedroom
或不在布局fragment_fourth
TextView tv = (TextView) myFragmentView.findViewById(R.id.bedroom);
tv.setText("My Header");
您的错误:
'void android.widget.TextView.setText(java.lang.CharSequence)' on a null object reference
它的问题Id
你的TextView
,变量tv
可能是 null
你调用setText
方法null
,这是你做不到的。
并且像这样修改您的代码:
TextView tv; //Global Variable
tv = (TextView) myFragmentView.findViewById(R.id.bedroom);
tv.setText("My Header");
也试试:清理你的项目并重建它。
更改您的 fragmentfour.xml 代码:(如果需要,输入 ScrollView
)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@color/colorPrimaryLight">
<include
android:layout_width="fill_parent"
android:layout_height="wrap_content"
layout="@layout/yourTextView_layout)" />
<ListView
android:id="@+id/customListView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_centerHorizontal="true"
android:layout_alignParentStart="true"
android:scrollbars="vertical"
android:textAlignment="gravity">
</ListView>
</LinearLayout>
更新您的 Fragment Java 类:
ListView listView;//globally
TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View myFragmentView = inflater.inflate(R.layout.fragment_fourth, container, false);
listView = (ListView) tv.findViewById(R.id.customListView);
//create our property elements
weatherProperties.add(new Weather(10, "Smith Street", "Sydney", "NSW", "A large 3 bedroom apartment right in the heart of Sydney! A rare find, with 3 bedrooms and a secured car park.", 450.00, "property_image_1", 3, 1, 1));
weatherProperties.add(new Weather(66, "King Street", "Sydney", "NSW", "A fully furnished studio apartment overlooking the harbour. Minutes from the CBD and next to transport, this is a perfect set-up for city living.", 320.00, "property_image_2", 1, 1, 1));
weatherProperties.add(new Weather(1, "Liverpool Road", "Liverpool", "NSW", "A standard 3 bedroom house in the suburbs. With room for several cars and right next to shops this is perfect for new families.", 360.00, "property_image_3", 3, 2, 2));
weatherProperties.add(new Weather(567, "Sunny Street", "Gold Coast", "QLD", "Come and see this amazing studio apartment in the heart of the gold coast, featuring stunning waterfront views.", 360.00, "property_image_4" , 1, 1, 1));
tv = (TextView) myFragmentView.findViewById(R.id.bedroom);
tv.setText("My Header");
// setListAdapter(new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,names));
// New Array Adapters
ArrayAdapter<Weather> adapter = new weatherArrayAdapter(getContext(), 0, weatherProperties);
//Find list view and bind it with the custom adapter
listView.setAdapter(adapter);
return myFragmentView;
}
关于java - 扩展 Listadapter 时出现运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48802921/
我正在实现 AdapterView产生一个AbsListView -like 类,我可以使用 CursorAdapter在布局中。我正在实现这个,因为我想使用方便的自动数据更新行为 CursorAda
Try to focus on general "dos and donts" regarding lists, e.g. is adding and removing 30 items of a 2
我有一个listadapter,其中有很多listitems,每个项目都包含一个textview 和一个imageview。我想从后端下载图片( 以 Base64 编码 ),所以 Picasso 和通
我对 Android 还很陌生,目前在使用自定义列表适配器时遇到一些问题。 基本上,我想制作一个问题列表,每个问题都有不同的类型(单选、复选框、文本、数字)。当 ListView 生成时,它显示得很好
我需要在另一个线程中加载自定义 ListAdapter 吗?我之前已经这样做过,但我也在同一个线程中下载了数据。 使用或不使用线程加载 ListAdapter 有何优缺点?加载线程是否需要大量资源?
我刚刚开始开发 Android,但遇到了问题。我有一个 DrawerNavigationListAdapter 和一个 DrawerNavigationListView,并且工作正常,现在我尝试向其中
我有一个 ListAdapter,用于在 Listview 中显示列表。现在我添加了一个长按菜单操作来删除任何选定的项目。 public boolean onContextItemSelected(M
加载列表适配器的最佳方式是什么。简单的问题,但我已经知道你们中的大多数人会说什么。你会说使用 LoaderManager/CursorManager。每个人都会告诉我它使用起来多么容易,而且它不能在
我已经有一个使用 SQLite 数据库和列表适配器的应用程序。我正在尝试更新我的应用程序以使用全文搜索功能,但正在努力寻找问题的答案。基本上,当我使用必要的 _id 列创建虚拟表时,数据库会将其转换为
我使用这个例子中的 ListAdapter: http://code.google.com/p/au-optimizing-layouts-201/source/browse/au_optimizin
在 ListAdapter 中,如何将数据添加到现有列表?submitList()只会用新列表替换现有列表, 也许一种更新数据的方法是这样的 adapter.addNewItem(list) 最佳答案
我在 RecyclerView 中遇到了分页无限滚动的问题,我正在使用 .addAll() 添加所有新项目 movieList.addAll(it.movieList) adapter.submi
我正在使用 Android Room和 Rx Flowable更新 RecyclerView将对象从我的数据库中。为了获得更好的动画和性能,我更新了项目以使用新的 ListAdapter在我的项目中。
我正在尝试将我的 Adapter 转换为 ListAdapter,以便将来包含 Paging 库。我的应用程序是一个基本的 2 fragment 笔记应用程序,第一个 fragment 具有回收器 V
我正在设置一个 RecyclerView,它使用 ListAdapter 来计算更改时的动画。 RecyclerView 通过 ViewModel 接收数据,ViewModel 通过 Firebase
我正在尝试使用 JSON 数据源中的项目列表填充 View 。我似乎无法让适配器在我的列表中显示 JSON 数据。这就是我到目前为止所做的。 MainActivity.java package com
我看了http://developer.android.com/reference/android/widget/ListAdapter.html并看到 ListAdapter 是一个公共(publi
我正在尝试获取 HashMap 的 ArrayList,以尝试获取可用的 ListAdapter。当我运行这个时,我得到一个 java.lang.RuntimeException: Your cont
好吧,所以我创建了一个 ListView 和我自己的 ListAdapter,但是每当我将结果添加到 ListAdapter 时,它都会崩溃,并显示 NullPointerException 当 fi
我有一个包含多个字段的类,我只想在 ListView 中显示其中一个字段 class FOO { String f1; String f2; String f3; }; FOO fo
我是一名优秀的程序员,十分优秀!