gpt4 book ai didi

java - 扩展 Listadapter 时出现运行时错误

转载 作者:行者123 更新时间:2023-11-30 10:19:11 24 4
gpt4 key购买 nike

我正在编写此代码以在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com