java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.View android.app.Activity.findViewById(int)”
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/29440415/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.app.Activity.findViewById(int)' on a null object reference
提问by
I always get an Error in my Android Project.
我的 Android 项目中总是出现错误。
java.lang.NullPointerException: Attempt to invoke virtual method 'android.view.View android.app.Activity.findViewById(int)' on a null object reference
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“android.view.View android.app.Activity.findViewById(int)”
In my MainActivity i am calling the class FragmentStart.
在我的 MainActivity 中,我调用类 FragmentStart。
FragmentStart.class
FragmentStart.class
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
public class FragmentStart extends Fragment {
//Define Listview
private ListView startList;
private String[] stringList;
Activity activity = getActivity();
public FragmentStart() {
//
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_start, container, false);
// Create ListView start
startList = (ListView) rootView.findViewById(R.id.startList);
stringList = getResources().getStringArray(R.array.startList);
if (activity != null) {
ArrayAdapter<String> objAdapter = new ArrayAdapter<String>(activity, android.R.layout.simple_list_item_1, stringList);
startList.setAdapter(objAdapter);
startList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
switch (startList.getPositionForView(view)) {
case 0:
// ...
break;
}
}
});
}
// Create ListView end
//New Entry
Button add = (Button) activity.findViewById(R.id.add);
add.setOnClickListener(new View.OnClickListener() {
public void onClick(View view) {
Intent myIntent = new Intent(view.getContext(), addItem.class);
startActivityForResult(myIntent, 0);
}
});
return rootView;
}
}
采纳答案by Daniel Nugent
In addition to what @Selvin pointed out, it looks like this:
除了@Selvin 指出的,它看起来像这样:
Button add = (Button) activity.findViewById(R.id.add);
...should be changed to this:
……应该改成这样:
Button add = (Button) rootView.findViewById(R.id.add);
回答by Aman Goel
Use the following code:
使用以下代码:
listView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// selectedPosition = position;
View newTypeView=listView1.getChildAt(position-listView1.getFirstVisiblePosition()).findViewById(R.id.RelativeLayout);
if (newTypeView.getClass().getName().toString().contains("RelativeLayout")) {
if (lastTouchedVw != null)
lastTouchedVw.setBackgroundColor(Color.parseColor("#ffffff"));
// mainImageView.setImageURI(Uri.parse(al.get(position).toString()));
//bigImageRelativeLayoutVw.setBackgroundColor(Color.parseColor("#ffb000"));
newTypeView.setBackgroundResource(R.drawable.cellbg);
lastTouchedVw = newTypeView;
}
回答by Akbar Khan
It's very simple
这很简单
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button btn1 = (Button) findViewById(R.id.button1);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, YourNextClass.class);
startActivity(intent);
}
});
}
}