问题
I am populating listview for search in tabwidget.My list contain an image and textview.Without TabWidget it works fines but in TabWidget it gives error .I have error in getview My locat is
08-07 16:24:44.300: E/AndroidRuntime(20166): FATAL EXCEPTION: main
08-07 16:24:44.300: E/AndroidRuntime(20166): java.lang.NullPointerException
08-07 16:24:44.300: E/AndroidRuntime(20166): at com.example.project.SearchDictionaryActivity$MyCustomAdapter.getView(SearchDictionaryActivity.java:392)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.AbsListView.obtainView(AbsListView.java:2485)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.ListView.measureHeightOfChildren(ListView.java:1250)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.ListView.onMeasure(ListView.java:1161)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.measureVertical(LinearLayout.java:670)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.measureVertical(LinearLayout.java:670)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2242)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.measureVertical(LinearLayout.java:670)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.measureChildBeforeLayout(LinearLayout.java:1385)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.measureVertical(LinearLayout.java:670)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.LinearLayout.onMeasure(LinearLayout.java:563)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4712)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.widget.FrameLayout.onMeasure(FrameLayout.java:293)
08-07 16:24:44.300: E/AndroidRuntime(20166): at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2242)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.View.measure(View.java:12842)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1240)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.view.ViewRootImpl.handleMessage(ViewRootImpl.java:2632)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.os.Handler.dispatchMessage(Handler.java:99)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.os.Looper.loop(Looper.java:137)
08-07 16:24:44.300: E/AndroidRuntime(20166): at android.app.ActivityThread.main(ActivityThread.java:4517)
08-07 16:24:44.300: E/AndroidRuntime(20166): at java.lang.reflect.Method.invokeNative(Native Method)
08-07 16:24:44.300: E/AndroidRuntime(20166): at java.lang.reflect.Method.invoke(Method.java:511)
08-07 16:24:44.300: E/AndroidRuntime(20166): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:993)
08-07 16:24:44.300: E/AndroidRuntime(20166): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:760)
08-07 16:24:44.300: E/AndroidRuntime(20166): at dalvik.system.NativeStart.main(Native Method)
My search_dictionary_item_item.xml is
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="left|center"
android:paddingBottom="5dp"
android:paddingLeft="5dp"
android:paddingTop="10dp" >
<ImageView
android:id="@+id/ImageView01"
android:layout_width="50dp"
android:layout_height="60dp" >
</ImageView>
<TextView
android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textColor="#0099CC"
android:textSize="20dp"
android:textStyle="bold" >
</TextView>
</LinearLayout>
my line 392 which is
at com.example.project.SearchDictionaryActivity$MyCustomAdapter.getView(SearchDictionaryActivity.java:392)
is
TextView textview = (TextView) row.findViewById(R.id.TextView01);
i have tried 2 suggestion
1.
public View getView(int position, View convertView, ViewGroup parent)
{
View row=convertView;
Context c = null;
if(convertView==null){
LayoutInflater inflater = getLayoutInflater(null);
row = inflater.inflate(R.layout.search_dictionary_item_item, parent, false);
}
TextView textview = (TextView) row.findViewById(R.id.TextView01);
ImageView imageview = (ImageView) row.findViewById(R.id.ImageView01);
textview.setText(data_text[position]);
imageview.setImageBitmap(data_image[position]);
return (row);
}
for placing null getLayoutInflater(null); I get
The method getLayoutInflater() in the type Activity is not applicable for the arguments (null)
2.Sugesstion
public View getView(int position, View convertView, ViewGroup parent)
{
// LayoutInflater inflater = getLayoutInflater();
View row;
LayoutInflater inflater = (LayoutInflater) convertView.getContext().getSystemService( Context.LAYOUT_INFLATER_SERVICE );
row = inflater.inflate(R.layout.search_dictionary_item_item, parent, false);
TextView textview = (TextView) row.findViewById(R.id.TextView01);
ImageView imageview = (ImageView) row.findViewById(R.id.ImageView01);
textview.setText(data_text[position]);
imageview.setImageBitmap(data_image[position]);
return (row);
}
Both Doesnot work with Logcat given Above
回答1:
your convertView
is never touched in suggestion #2
convertView = inflater.inflate(R.layout.search_dictionary_item_item, parent, false);
should fix it, you also need to return convertView
instead of row
回答2:
change your getview method like this..
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) convertView.getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(
R.layout.search_dictionary_item_item, null);
}
TextView textview = (TextView) convertView
.findViewById(R.id.TextView01);
ImageView imageview = (ImageView) convertView
.findViewById(R.id.ImageView01);
textview.setText(data_text[position]);
imageview.setImageBitmap(data_image[position]);
return convertView;
}
回答3:
I think you used a wrong layout instead your Correct row layout, I got the same error. when I verified the row layout was another one
e.g. instead of
convertView = inflater.inflate(R.layout.wrong_layout, parent, false);
use
convertView = inflater.inflate(R.layout.Correct_layout, parent, false);
来源:https://stackoverflow.com/questions/18102388/nullpointerexception-in-getview-of-adapter-extends-baseadapter