我正在尝试学习如何在片段中显示具有3列的网格视图。值来自strings.xml文件作为数组列表。当我运行应用程序时,它会崩溃。有人能帮助我在3列中显示值,即位置、描述和时间。我无法继续在gridview中显示读取值。
My Code are as follows:
**Strings.XML**
<string-array name="PlacesName">
<item>Durban</item>
<item>Paris</item>
<item>HongKong</item>
<item>Canada</item>
</string-array>
<string-array name="Description">
<item>Description1</item>
<item>Description2</item>
<item>Description3</item>
</string-array>
<string-array name="ScheduleDate">
<item>12/1/2015</item>
<item>13/2/2015</item>
<item>14/4/2015</item>
<item>15/5/2015</item>
</string-array>
**Fragment**
*/
public class FlightFragment extends Fragment {
GridView grid;
public FlightFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_flight, container, false);
// Inflate the layout for this fragment
grid = (GridView) view.findViewById(R.id.gridView);
MyAdapter myAdapter = new MyAdapter();
grid.setAdapter(myAdapter);
return view;
}
class MyAdapter extends BaseAdapter {
ArrayList<Schedule> list;
private Context context;
MyAdapter() {
list = new ArrayList();
Resources resources = context.getResources();
String[] tempPlaces = resources.getStringArray(R.array.PlacesName);
String[] tempDate = resources.getStringArray(R.array.ScheduleDate);
String[] tempDescription = resources.getStringArray(R.array.Description);
for(int count=0;count<4;count++ ){
Schedule tempSchedule = new Schedule(tempPlaces[count],tempDate[count],tempDescription[count]);
list.add(tempSchedule);
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Schedule tempSchedule = list.get(position);
TextView textView;
if (convertView == null){
textView = new TextView(context);
textView.setLayoutParams(new GridView.LayoutParams(85, 85));
textView.setPadding(8, 8, 8, 8);
}
else{
textView = (TextView) convertView;
}
textView.setText(tempSchedule.Place);
return textView;
}
}
class Schedule {
String Place;
String ScheduleTime;
String Description;
Schedule(String place, String scheduleTime, String description ) {
this.Description = description;
this.Place = place;
this.ScheduleTime = scheduleTime;
}
}
}
错误
致命异常:主java。com上的lang.NullPointerException。ts.FlightFragment$MyAdapter。(FlightFragment.java:51)在com上。ts.FlightFragment。android上的onCreateView(FlightFragment.java:38)。支持v4.app。碎片android上的performCreateView(Fragment.java:1786)。支持v4.app。碎片管理。android上的moveToState(FragmentManager.java:947)。支持v4.app。碎片管理。android上的moveToState(FragmentManager.java:1126)。支持v4.app。回溯记录。在android上运行(backbackrecord.java:739)。支持v4.app。碎片管理。android上的ExependingActions(FragmentManager.java:1489)。支持v4.app。FragmentManagerImpl 1美元。在android上运行(FragmentManager.java:454)。操作系统。处理程序。android上的handleCallback(Handler.java:725)。操作系统。处理程序。android上的dispatchMessage(Handler.java:92)。操作系统。活套。android上的loop(Looper.java:176)。应用程序。活动线程。java上的main(ActivityThread.java:5279)。郎。反思。方法java上的InvokEnable(本机方法)。郎。反思。方法在com上调用(Method.java:511)。Android内部的操作系统。ZygoteInit$MethodandArgscaler。在com上运行(ZygoteInit.java:1102)。Android内部的操作系统。合子岩。dalvik的main(ZygoteInit.java:869)。系统原生艺术。主(本机方法)
问题
MyAdapter中的上下文为空
解决方案:-
将上下文传递给MyAdapter构造函数,如下所示:-
MyAdapter myAdapter = new MyAdapter(getActivity());
并在MyAdapter类中更改此选项
MyAdapter(Context context) {
this.context=context;
......
}
问题是您忘记在适配器中分配上下文。您可以通过构造函数传递它。在活动中,您可以简单地使用此作为上下文。在您的例子中,在片段中,需要将getActivity()
作为上下文传递。
public class FlightFragment extends Fragment {
GridView grid;
public FlightFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_flight, container, false);
// Inflate the layout for this fragment
grid = (GridView) view.findViewById(R.id.gridView);
MyAdapter myAdapter = new MyAdapter(getActivity());
grid.setAdapter(myAdapter);
return view;
}
class MyAdapter extends BaseAdapter {
ArrayList<Schedule> list;
private Context context;
MyAdapter(Context context) {
this.context = context;
list = new ArrayList();
Resources resources = context.getResources();
String[] tempPlaces = resources.getStringArray(R.array.PlacesName);
String[] tempDate = resources.getStringArray(R.array.ScheduleDate);
String[] tempDescription = resources.getStringArray(R.array.Description);
for(int count=0;count<4;count++ ){
Schedule tempSchedule = new Schedule(tempPlaces[count],tempDate[count],tempDescription[count]);
list.add(tempSchedule);
}
}
@Override
public int getCount() {
return list.size();
}
@Override
public Object getItem(int position) {
return list.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Schedule tempSchedule = list.get(position);
if (convertView == null){
convertView = LayoutInflater.from(context).inflate(R.layout.grid_row, parent, false);
}
TextView placeName = (TextView) convertView.findViewById(R.id.place_name);
TextView scheduleDate = (TextView) convertView.findViewById(R.id.schedule_date);
TextView description = (TextView) convertView.findViewById(R.id.description);
placeName.setText(tempSchedule.Place);
scheduleDate.setText(tempSchedule.ScheduleTime);
description.setText(tempSchedule.Description);
return convertView;
}
}
在grid_行中。xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical">
<TextView
android:id="@+id/place_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/schedule_date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/description"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
编辑您需要创建的网格行。xml,包括3个文本视图。在getView上为该布局充气,然后将其返回。通过使用ViewHolder模式,可以提高性能以避免findViewById()。
我正在尝试制作一个选项卡,其中我必须在gridview中显示图像,所以我从一个库中制作了普通选项卡,并制作了一个适配器来显示我的主要活动代码中的图像。 我的片段类。 我已将适配器设置如下: 我能够在活动中创建网格视图,但是我用它来声明类中的图像,但在这里我遇到了错误。我在适配器中声明为适配器将调用图像的 Sso。它正确编译,没有任何错误,但它显示运行时错误错误为 那么如何解决这个问题,我必须声明图
我尝试过构建本机用户界面组件,但通常是成功或失败的。该组件似乎没有以react-本机呈现。 不过,对于这个问题,我特别尝试在react-native中渲染一个Android片段,但没有显示任何内容。示例代码: 使用上面的视图管理器,视图应该在的地方甚至没有被涂成白色,这意味着框架布局本身没有被渲染。 我做错了什么?
我编写了一个代码,从txt文件中提取一行,将其拆分为不同的字符串和整数,然后将其存储到数组列表中,作为一个名为Professor的对象。主类的代码为: 问题是如何在控制台中显示arraylist?以及如何访问ArrayList中的一个对象中的字符串? 提前致谢
我正在开发包含2个片段的应用程序,我想根据需要显示隐藏。下面的代码有一个简单的例子来说明我的问题。这个简单的Fragmentactivity包含一个按钮和一个listfragment。 这个简单的例子完美无瑕。但我不满足于展示隐藏片段。如果删除布局。设置可见性(View.GONE);然后从代码中选择ft.hide(f);不会隐藏碎片。事实上,我们不是在隐藏片段,而是在隐藏容器。 我的问题是,这是一
问题内容: 我有一个带有gridview的适配器,可以用作活动。我正在尝试将其放在Fragment中并进行转换,但是它不起作用。当我在Activity中包含IconFragmentSystem时,当我尝试打开Activity时会强制关闭。 我知道活动有效,因为我可以使用其他片段,并且一切都很好,所以我知道我的问题出在此文件中。 我尝试了不同的方法来实现此目的,但都失败了,我真的可以使用帮助将我指向
我遇到了一个如何在对话框片段中更新片段的问题。 当我单击过滤器菜单按钮时,会显示一个新的对话框片段,其中包括一个无线电组。 我想在单击ok按钮时更新包含位置列表的片段。 它是PlaceActive的代码,其中包含PlaceFraank: 公共类PlaceActive扩展AppCompatActive{ } 以下是PlaceFragment类的代码: 公共类PlaceFragment扩展了片段{ }