【问题标题】:Why my app crashes when I use if condition in my oncreate?当我在 oncreate 中使用 if 条件时,为什么我的应用程序会崩溃?
【发布时间】:2016-01-20 08:22:17
【问题描述】:

我想通过检查我的 onCreate 活动中的某些条件来动态更改我的 UI。但是我的应用崩溃了。

 @Override
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
        setContentView(R.layout.busdetail);

        Intent i=getIntent();
        String s=i.getStringExtra("fname");
        Log.d("ssssss: ",s);
        if(s=="itemName1")
        {
           for(int k=0;k<itemName1.length;k++)
           {
               arrayk[k]=itemName1[k];
           }
        }

        CustomList adapter = new CustomList(this, arrayk, imageId);

        list = (ListView) findViewById(R.id.list);
        list.setAdapter(adapter);
        list.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                //String selectedItem = itemName[+position];
                // Toast.makeText(getApplicationContext(),selectedItem,Toast.LENGTH_LONG).show();
                Intent intent = new Intent(BusDetail.this, AddComment.class);
                startActivity(intent);
            }
        });
    }

这里if (s=="itemName1") 然后我将itemName1 复制到arrayk 中。 itemName1 和 arrayk 都是字符串数组。但是当我点击一个项目时,我的应用程序崩溃了。当我避免 if 条件阻塞时,我的应用程序运行良好。

【问题讨论】:

  • 请更具体。 “崩溃”时会抛出什么错误消息/调用堆栈?
  • 不要那样做:s=="itemName1",改用s.equals("itemName1")itemName1 是什么?它在哪里初始化? arrayk 的同样问题。
  • if(i != null) ... if(s!=null)

标签: android android-layout android-intent


【解决方案1】:

两件事。

首先,比较String,不要使用==!您必须比较String 的值,而不是对象本身。现在你的条件不对了……== 比较的是对象引用,而不是内容。

使用以下条件:if(s.equals("itemName1")) 如果您想忽略大小写,请使用equalsIgnoreCase("itemName1")

然后请记住,在onCreate 期间,您的 UI 尚未准备好。如果您对 UI 有任何更改,请在 onCreateView

中进行

/////////////////////////////////////// ///////////

onCreateView 是这样工作的:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    { 

    View mainview = inflater.inflate(R.layout.yourlayout, container, false);

    //mainview is your main view, use it to find your elements, assign them listeners, change text, attributes, etc

    return mainview; //you have to return this view

    }

它基本上像 onCreate 一样工作,只是你必须管理与视图和 UI 相关联的所有内容。您还必须在此处对所需的视图进行膨胀,然后将其返回。

【讨论】:

  • 我使用 if(s.equals("itemName1")) ... 但这次应用程序也会崩溃
  • 我如何在这段代码中使用 onCreateView 请解释一下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-24
  • 1970-01-01
  • 2014-04-28
  • 2014-06-27
相关资源
最近更新 更多