【问题标题】:android crash when using setVisibility(View.VISIBLE)使用 setVisibility(View.VISIBLE) 时 android 崩溃
【发布时间】:2011-05-10 13:10:25
【问题描述】:

我似乎在以下位置遇到应用程序崩溃:

parent.findViewById(R.id.a_1).setVisibility(View.VISIBLE);

不知道我做错了什么

代码如下

layouttext.java

    public class layouttest extends Activity {
 private Spinner solvefor; 
 private ArrayAdapter<CharSequence> featuresAdapter; 
 private List<CharSequence> featuresList; 

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        featuresList = new ArrayList<CharSequence>(); 
        featuresAdapter = new ArrayAdapter<CharSequence>(this, android.R.layout.simple_spinner_item, featuresList); 
        featuresAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
        solvefor = ((Spinner) layouttest.this.findViewById(R.id.solvefor)); 
        solvefor.setAdapter(featuresAdapter); 
        featuresAdapter.add("Velocity"); 
        featuresAdapter.add("Time"); 
        featuresAdapter.add("Distance"); 
        solvefor.setOnItemSelectedListener(new MyOnItemSelectedListener());
    }
}

MyOnItemSelectedListener.java 包android.example.layouttest;

import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Toast;

public class MyOnItemSelectedListener implements OnItemSelectedListener {
 private static final int SPINNER_OPTION_FIRST = 0; 
    private static final int SPINNER_OPTION_SECOND = 1;
 public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
   switch(pos) { 
         case SPINNER_OPTION_FIRST: { 
          Toast.makeText(parent.getContext(), "0", Toast.LENGTH_LONG).show();
          break;
         } 
         case SPINNER_OPTION_SECOND: { 
          Toast.makeText(parent.getContext(), "1", Toast.LENGTH_LONG).show();
          parent.findViewById(R.id.a_1).setVisibility(View.VISIBLE);
          parent.findViewById(R.id.a_2).setVisibility(View.VISIBLE);
          break;
         } 
  }  
 }   
 public void onNothingSelected(AdapterView<?> parent) {      
   // Do nothing.    
   }
}

【问题讨论】:

  • 您确定要查看的是parent,而不是view
  • 能否请您添加应用程序日志和异常堆栈跟踪。没有他们就很难提供帮助。

标签: android


【解决方案1】:

请记住,View#findViewById 从您调用它的视图开始搜索并下降到其子视图。如果具有您要查找的 ID 的视图既不是视图本身也不是该视图的后代,则搜索将失败,findViewById 将返回 null

正如 Falmarri 建议的那样,在这种情况下,您可能不想在 parent 上调用 findViewById。 (您可能也不想从那里通过view 调用它。)

您希望在视图层次结构中的哪个位置找到R.id.a_1

【讨论】:

    猜你喜欢
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2013-04-17
    • 2013-04-14
    • 2016-01-06
    • 2017-09-27
    • 2012-10-21
    • 2023-03-24
    相关资源
    最近更新 更多