- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
实际上,自从我开始开发此应用程序以来,这个问题已经困扰我大约 3 个月了。我已经阅读了这个网站上的数百篇文章,在其他网站上,我已经阅读了教程,但我还没有找到解决方案。 我相信这个问题与我拥有应用程序结构的方式有关。
我正在开发一个显示多个部分的应用程序,每个部分都是一个 fragment ,主要 Activity 使用 ViewPager 一次显示一个 fragment (如 fb 应用程序或 twitter 应用程序)。每个部分将显示具有不同信息的 ListView :新闻、视频、分类广告等。一旦显示一个部分,比如说新闻部分,它就会显示一个包含文章/新闻的 ListView 。问题是当我尝试显示 ListView 时,因为在我用来显示 ListView 的适配器中,在 setAdapter
行中给我 NullPointerException。
我找到了给我异常的行,实际上是 context
声明。即使在我所有的 fragment 中上下文都是空的(我不知道为什么),我能够显示 ListView ,但在其他一些 fragment 中,应用程序崩溃并给出 NPE。我通过 Context context=getActivity()
行获取上下文,但是当我测试它时,它给了我 null。
这是我成功显示 ListView 的 fragment 之一
public class HomeActivity extends Fragment{
static ListView newsList;
static Item item=null;
Context context=getActivity();
ItemAdapter itemAdapter;
List<Item> news=new ArrayList<Item>();
static int i=0;
static Activity activity;
static String HOME_FRAGMENT="NEWS";
public static final int TIME_ENTRY_REQUEST_CODE=1;
FragmentManager fm;
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
super.onCreateView(inflater, container, savedInstanceState);
View view=inflater.inflate(R.layout.home_activity, container,false);
newsList=(ListView)view.findViewById(R.id.newslist);
setRetainInstance(true);
return view;
}
public void onAttach(Activity activity){
super.onAttach(activity);
HomeActivity.activity=activity;
}
public void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
}
public void displayNews(final List<Item> news){
try {
if(news==null || news.size()==0){
//Retrieve again the data list
}
Log.d("HomeActivity","total news: "+news.size());
} catch (Exception e) {
e.printStackTrace();
}
if(context==null){
Log.d("HomeActivity","context null!");
}
itemAdapter=new ItemAdapter(context,(ArrayList<Item>) news);
newsList.setAdapter(itemAdapter);
}
更新:这是我获得 NPE 的另一个 fragment ,
public class VideosActivity extends Fragment{
ListView listvideo;
ItemAdapter itemAdapter;
Context context;
Activity activity;
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
super.onCreateView(inflater, container, savedInstanceState);
View view=inflater.inflate(R.layout.videos_activity, container,false);
listvideo=(ListView)view.findViewById(R.id.videoslist);
Log.d("videos activity","onCreateView ready!!");
context=getActivity();
setRetainInstance(true);
return view;
}
public void onAttach(Activity activity){
super.onAttach(activity);
this.activity=activity;
}
public void displayVideos(final List<Item> videos){
try {
if(videos==null || videos.size()==0){
//Retrieve again the data list
}
} catch (Exception e) {
e.printStackTrace();
}
for(int i=0;i<videos.size();i++){
}
itemAdapter=new ItemAdapter(activity,(ArrayList<Item>) videos);//I also used context in this line, but I still get the NPE
listvideo.setAdapter(itemAdapter); //Here's the line that gives me the NPE
}
我正在解析 XML 中的所有信息,并通过 AsyncTask 管理所有内容
这是我的适配器
public class ItemAdapter extends BaseAdapter implements OnItemClickListener{
Item item=new Item();
private ArrayList<Item> news=new ArrayList<Item>();
private static final int NO_PICTURE_VIEW=0;
private static final int PICTURE_VIEW=1;
public ItemAdapter(Context context,ArrayList<Item> items) {
super();
news.addAll(items);
}
public int getCount() {
// TODO Auto-generated method stub
return news.size();
}
public Item getItem(int index) {
// TODO Auto-generated method stub
return getItem(index);
}
public long getItemId(int index) {
// TODO Auto-generated method stub
return index;
}
public int getViewTypeCount() {
return 2;
}
public int getItemViewType(int position) {
Item article=news.get(position);
if(article.getImage()!=null)
return PICTURE_VIEW;
else
return NO_PICTURE_VIEW;
}
@Override
public View getView(int index, View view, ViewGroup parent) {
item=news.get(index);
int type=getItemViewType(index);
if(view==null){
LayoutInflater inflater=LayoutInflater.from(parent.getContext());
if(type==NO_PICTURE_VIEW){
view=inflater.inflate(R.layout.item_no_picture_list,parent,false);
TextView titleView=(TextView)view.findViewById(R.id.titleNoPicture);
titleView.setText(item.getTitle());
}
else{
view=inflater.inflate(R.layout.item_picture_list,parent,false);
TextView titleView=(TextView)view.findViewById(R.id.titleArticle);
ImageView image=(ImageView)view.findViewById(R.id.imageItem);
titleView.setText(item.getTitle());
image.setImageBitmap(item.getImage());
}
}
return view;
}
}
这是主要 Activity
public class MainActivity extends FragmentActivity{
private String tabs[]={"News","Sports","Valley Life","Videos","Classifieds","Directory","Weather"};
ViewPager viewPager=null;
FragmentManager fragmentManager=getSupportFragmentManager();
android.support.v4.app.FragmentTransaction ft=fragmentManager.beginTransaction();
AdapterView adapterView;
static ParseManager parser=new ParseManager();
static List<Item> news=new ArrayList<Item>();
ArrayList<Item> sports=new ArrayList<Item>();
ArrayList<Item> valleyLife=new ArrayList<Item>();
public static final int TIME_ENTRY_REQUEST_CODE=1;
HomeActivity home;
JSONManager jmanager=new JSONManager();
WeatherManager weather=new WeatherManager();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager=(ViewPager)findViewById(R.id.pager);
viewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener(){
public void onPageSelected(int position)
getActionBar().setSelectedNavigationItem(position);
}
});
viewPager.setAdapter(new AdapterView(fragmentManager));
viewPager.setOffscreenPageLimit(tabs.length);
adapterView=new AdapterView(getSupportFragmentManager());
/*initialization of the action bar: color, icon & title.*/
final android.app.ActionBar actionbar=getActionBar();
ColorDrawable color=new ColorDrawable(Color.parseColor("#cd853f"));
actionbar.setBackgroundDrawable(color);
actionbar.setTitle("Title");
ActionBar.TabListener tabListener=new ActionBar.TabListener() {
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
viewPager.setCurrentItem(tab.getPosition());
ft=getFragmentManager().beginTransaction();
//ft.replace(layouts[tab.getPosition()], (adapterView.getItem(tab.getPosition()));
ft.commit();
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
};
/*Displaying Tabs for the app */
for(int i=0;i<tabs.length;i++)
actionbar.addTab(actionbar.newTab().setText(tabs[i]).setTabListener(tabListener));
actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageSelected(int position) {
actionbar.setSelectedNavigationItem(position);
}
@Override
public void onPageScrolled(int arg0, float arg1, int arg2) {
}
@Override
public void onPageScrollStateChanged(int arg0) {
}
});
parser.execute();
jmanager.execute();
weather.execute();
getApplicationContext();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
这是我的日志
FATAL EXCEPTION: main
java.lang.NullPointerException
at com.example.test23.VideosActivity.displayVideos(VideosActivity.java:54)
at com.example.test23.ParseManager.onPostExecute(ParseManager.java:52)
at com.example.test23.ParseManager.onPostExecute(ParseManager.java:1)
at android.os.AsyncTask.finish(AsyncTask.java:631)
at android.os.AsyncTask.access$600(AsyncTask.java:177)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:644)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5031)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555)
at dalvik.system.NativeStart.main(Native Method)
更新:这是video_activity.xml
<?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" >
<ListView
android:id="@+id/videoslist"
android:layout_width="wrap_content"
android:layout_height="wrap_content" >
</ListView>
</LinearLayout>
我只是想知道我的应用程序出了什么问题,以及为什么我的上下文为空,这样我就可以继续我的应用程序的下一步,也许是结构、编程方式的问题,我不知道。感谢任何帮助,如果您需要更多代码,请告诉我。
最佳答案
确保从此行中删除“=getActivity()”:
Context context=getActivity();
所以它简单地写着:
Context context;
然后改变这个:
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
super.onCreateView(inflater, container, savedInstanceState);
View view=inflater.inflate(R.layout.home_activity, container,false);
newsList=(ListView)view.findViewById(R.id.newslist);
setRetainInstance(true);
return view;
}
为此:
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
super.onCreateView(inflater, container, savedInstanceState);
View view=inflater.inflate(R.layout.home_activity, container,false);
newsList=(ListView)view.findViewById(R.id.newslist);
context = getActivity(); // <--- add this line here
setRetainInstance(true);
return view;
}
关于android - Activity 中的 fragment 在 ListView 的 setAdapter 中获取上下文 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24395153/
我需要将文本放在 中在一个 Div 中,在另一个 Div 中,在另一个 Div 中。所以这是它的样子: #document Change PIN
奇怪的事情发生了。 我有一个基本的 html 代码。 html,头部, body 。(因为我收到了一些反对票,这里是完整的代码) 这是我的CSS: html { backgroun
我正在尝试将 Assets 中的一组图像加载到 UICollectionview 中存在的 ImageView 中,但每当我运行应用程序时它都会显示错误。而且也没有显示图像。 我在ViewDidLoa
我需要根据带参数的 perl 脚本的输出更改一些环境变量。在 tcsh 中,我可以使用别名命令来评估 perl 脚本的输出。 tcsh: alias setsdk 'eval `/localhome/
我使用 Windows 身份验证创建了一个新的 Blazor(服务器端)应用程序,并使用 IIS Express 运行它。它将显示一条消息“Hello Domain\User!”来自右上方的以下 Ra
这是我的方法 void login(Event event);我想知道 Kotlin 中应该如何 最佳答案 在 Kotlin 中通配符运算符是 * 。它指示编译器它是未知的,但一旦知道,就不会有其他类
看下面的代码 for story in book if story.title.length < 140 - var story
我正在尝试用 C 语言学习字符串处理。我写了一个程序,它存储了一些音乐轨道,并帮助用户检查他/她想到的歌曲是否存在于存储的轨道中。这是通过要求用户输入一串字符来完成的。然后程序使用 strstr()
我正在学习 sscanf 并遇到如下格式字符串: sscanf("%[^:]:%[^*=]%*[*=]%n",a,b,&c); 我理解 %[^:] 部分意味着扫描直到遇到 ':' 并将其分配给 a。:
def char_check(x,y): if (str(x) in y or x.find(y) > -1) or (str(y) in x or y.find(x) > -1):
我有一种情况,我想将文本文件中的现有行包含到一个新 block 中。 line 1 line 2 line in block line 3 line 4 应该变成 line 1 line 2 line
我有一个新项目,我正在尝试设置 Django 调试工具栏。首先,我尝试了快速设置,它只涉及将 'debug_toolbar' 添加到我的已安装应用程序列表中。有了这个,当我转到我的根 URL 时,调试
在 Matlab 中,如果我有一个函数 f,例如签名是 f(a,b,c),我可以创建一个只有一个变量 b 的函数,它将使用固定的 a=a1 和 c=c1 调用 f: g = @(b) f(a1, b,
我不明白为什么 ForEach 中的元素之间有多余的垂直间距在 VStack 里面在 ScrollView 里面使用 GeometryReader 时渲染自定义水平分隔线。 Scrol
我想知道,是否有关于何时使用 session 和 cookie 的指南或最佳实践? 什么应该和什么不应该存储在其中?谢谢! 最佳答案 这些文档很好地了解了 session cookie 的安全问题以及
我在 scipy/numpy 中有一个 Nx3 矩阵,我想用它制作一个 3 维条形图,其中 X 轴和 Y 轴由矩阵的第一列和第二列的值、高度确定每个条形的 是矩阵中的第三列,条形的数量由 N 确定。
假设我用两种不同的方式初始化信号量 sem_init(&randomsem,0,1) sem_init(&randomsem,0,0) 现在, sem_wait(&randomsem) 在这两种情况下
我怀疑该值如何存储在“WORD”中,因为 PStr 包含实际输出。? 既然Pstr中存储的是小写到大写的字母,那么在printf中如何将其给出为“WORD”。有人可以吗?解释一下? #include
我有一个 3x3 数组: var my_array = [[0,1,2], [3,4,5], [6,7,8]]; 并想获得它的第一个 2
我意识到您可以使用如下方式轻松检查焦点: var hasFocus = true; $(window).blur(function(){ hasFocus = false; }); $(win
我是一名优秀的程序员,十分优秀!