我尝试过别人问题的解决方案,但没有奏效。 我在LayoutInflater的BaseAdapter类中遇到以下错误:
06-21 17:24:38.808: E/AndroidRuntime(23959): FATAL EXCEPTION: main
06-21 17:24:38.808: E/AndroidRuntime(23959): Process: org.nick.yarntrading, PID: 23959
06-21 17:24:38.808: E/AndroidRuntime(23959): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.nick.yarntrading/org.nick.yarntrading.MainActivity}: java.lang.NullPointerException
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2338)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2390)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.app.ActivityThread.access$800(ActivityThread.java:151)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1321)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.os.Handler.dispatchMessage(Handler.java:110)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.os.Looper.loop(Looper.java:193)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.app.ActivityThread.main(ActivityThread.java:5292)
06-21 17:24:38.808: E/AndroidRuntime(23959): at java.lang.reflect.Method.invokeNative(Native Method)
06-21 17:24:38.808: E/AndroidRuntime(23959): at java.lang.reflect.Method.invoke(Method.java:515)
06-21 17:24:38.808: E/AndroidRuntime(23959): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:824)
06-21 17:24:38.808: E/AndroidRuntime(23959): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:640)
06-21 17:24:38.808: E/AndroidRuntime(23959): at dalvik.system.NativeStart.main(Native Method)
06-21 17:24:38.808: E/AndroidRuntime(23959): Caused by: java.lang.NullPointerException
06-21 17:24:38.808: E/AndroidRuntime(23959): at org.nick.card_view.DataListAdapter.<init>(DataListAdapter.java:34)
06-21 17:24:38.808: E/AndroidRuntime(23959): at org.nick.yarntrading.Home.onCreateView(Home.java:36)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:938)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1115)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1478)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.support.v4.app.FragmentActivity.onStart(FragmentActivity.java:570)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.app.Instrumentation.callActivityOnStart(Instrumentation.java:1174)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.app.Activity.performStart(Activity.java:5274)
06-21 17:24:38.808: E/AndroidRuntime(23959): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2311)
06-21 17:24:38.808: E/AndroidRuntime(23959): ... 11 more
以下是扩展BaseAdapter的DataAdapter类:
public class DataListAdapter extends BaseAdapter {
App app;
ArrayList<HashMap<String,String>> listdata = null;
FragmentManager fm;
LayoutInflater inflater = null;
LinearLayout lnlyt;
//ProductList prodctlst;
public DataListAdapter(App a, FragmentManager f)
{
this.app =a;
this.fm = f;
**inflater = (LayoutInflater) app.getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);**
listdata = new ProductList(this.app).returnList();
}
@Override
public int getCount() {
return listdata.size();
}
@Override
public Object getItem(int position) {
return listdata.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
public class ViewHolder{
TextView prod_name,prod_price,prod_descrp;
}
@Override
public View getView(int position, View v, ViewGroup parent) {
final ViewHolder h;
if(v==null)
{
v = inflater.inflate(R.layout.card_view,null);
h = new ViewHolder();
h.prod_name =(TextView) lnlyt.findViewById(R.id.prod_name);
h.prod_price = (TextView)lnlyt.findViewById(R.id.prod_price);
h.prod_descrp = (TextView) lnlyt.findViewById(R.id.prod_description);
v.setTag(h);
}else
h = (ViewHolder) v.getTag();
h.prod_name.setText(listdata.get(position).get("prodctName"));
h.prod_price.setText(listdata.get(position).get("prodctPrice"));
h.prod_descrp.setText(listdata.get(position).get("prodctDescription"));
return v;
}
}
这是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">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:layout_marginLeft="@dimen/feed_item_margin"
android:layout_marginRight="@dimen/feed_item_margin"
android:layout_marginTop="@dimen/feed_item_margin"
android:background="@drawable/bg_parent_rounded_corner"
android:orientation="vertical"
android:paddingTop="@dimen/feed_item_padding_top_bottom" >
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:paddingLeft="@dimen/feed_item_padding_left_right"
android:paddingRight="@dimen/feed_item_padding_left_right" >
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="@dimen/feed_item_profile_info_padd" >
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/prod_name"
android:textStyle="bold"
android:text="Mobile"
android:textSize="20sp"/>
<TextView
android:id="@+id/prod_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="140dp"
android:layout_toEndOf="@+id/prod_name"
android:text="15.2641"
android:textSize="20sp" />
</RelativeLayout>
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingLeft="15dp"
android:layout_marginTop="8dp"
>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/prod_description"
android:textColor="@android:color/black"
android:textSize="18sp"
android:text="Description"
/>
</LinearLayout>
</LinearLayout>
这是Home类的代码:
package org.nick.yarntrading;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import android.widget.RelativeLayout;
import org.nick.card_view.DataListAdapter;
public class Home extends ListFragment {
App a;
ListView card_list;
DataListAdapter adapter;
RelativeLayout prodctView;
public void home(App a)
{
this.a = a;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@SuppressLint("InflateParams") @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
prodctView = (RelativeLayout)inflater.inflate(R.layout.home_listview,null);
card_list = (ListView)prodctView.findViewById(android.R.id.list);
adapter = new DataListAdapter(a,getActivity().getSupportFragmentManager(),getActivity());
card_list.setAdapter(adapter);
return prodctView;
}
}
App类扩展了Applications。 我尝试了stackoverflow提供的其他解决方案,但它没有奏效。 这里我要做的是登录app后显示列表\视图。
任何想法都表示赞赏。 提前致谢。
答案 0 :(得分:2)
在那里,
v = inflater.inflate(R.layout.card_view,null);
h = new ViewHolder();
h.prod_name =(TextView) *lnlyt*.findViewById(R.id.prod_name);
v.setTag(h);
}else
h = (ViewHolder) v.getTag();
h.prod_name.setText(listdata.get(position).get("prodctName"));
return v;
}
您正在通过 LynLyt 引用您的观点,而您甚至无法对其进行初始化,请尝试以下操作:
@Override
public View getView(int position, View v, ViewGroup parent) {
//final ViewHolder h;// you have just declared it , initialize it first
final ViewHolder h = new ViewHolder();
if(v==null)
{
v = inflater.inflate(R.layout.card_view,null);
h = new ViewHolder();
h.prod_name =(TextView) v.findViewById(R.id.prod_name);
h.prod_price = (TextView)v.findViewById(R.id.prod_price);
h.prod_descrp = (TextView) v.findViewById(R.id.prod_description);
v.setTag(h);
}else
h = (ViewHolder) v.getTag();
h.prod_name.setText(listdata.get(position).get("prodctName"));
h.prod_price.setText(listdata.get(position).get("prodctPrice"));
h.prod_descrp.setText(listdata.get(position).get("prodctDescription"));
return v;
}
逻辑就是这样,一旦你像这样夸大你的布局,
v = inflater.inflate(R.layout.card_view,null); 现在您已经在视图中包含了您的布局&#39; V&#39;现在可以参考&#39; v&#39;现在!
希望我能帮到你。答案 1 :(得分:0)
这是适合我的解决方案 我将getActivity()传递给DataListAdapter并将其用作上下文
Context cont;
//ProductList prodctlst;
public DataListAdapter(App a, FragmentManager f,Context context)
{
this.app =a;
this.fm = f;
this.cont = context;
inflater = ((Activity) cont).getLayoutInflater();
listdata = new ProductList(this.app).returnList();
}