2016-06-13 99 views
1

我有片段我想創建一個自定義列表視圖,但是當我發送參數到適配器它給我錯誤。如何在Android中的Fragment中填充自定義列表?

這是我在片段代碼..

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.fragment_list, container, false); 

    TextView tv = (TextView) v.findViewById(R.id.textView1); 

    CustomAdapter arrayAdapter = new CustomAdapter(getActivity(), R.layout.search_catagory_list, prgmImages, prgmNameList); 
    lv = (ListView) v.findViewById(R.id.listView); 

    lv.setAdapter(arrayAdapter); 
    return v; 
} 

這是我MainHome.java

package com.example.yasee.bitescene.Fragments; 

import android.content.Context; 
import android.net.Uri; 
import android.os.Bundle; 
import android.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ListView; 
import android.widget.TextView; 

import com.example.yasee.bitescene.R; 
import com.example.yasee.bitescene.adapter.CustomAdapter; 

import java.util.ArrayList; 

public class MainHome extends Fragment { 
    private static final String ARG_PARAM1 = "param1"; 
    private static final String ARG_PARAM2 = "param2"; 
    private String mParam1; 
    private String mParam2; 

ListView lv; 
public static int [] prgmImages={R.drawable.one,R.drawable.two,R.drawable.three,R.drawable.four,R.drawable.five}; 
public static String [] prgmNameList={"TRULY RANDOM","TEX MEX","BBQ","BRUNCH","SUSHI"}; 

private OnFragmentInteractionListener mListener; 

public MainHome() { 

} 

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

    View v = inflater.inflate(R.layout.fragment_list, container, false); 

    TextView tv = (TextView) v.findViewById(R.id.textView1); 

    CustomAdapter arrayAdapter = new CustomAdapter(getActivity(), R.layout.search_catagory_list, prgmImages, prgmNameList); 
    lv = (ListView) v.findViewById(R.id.listView); 

    lv.setAdapter(arrayAdapter); 
    return v; 
} 

public static MainHome newInstance(String param1, String param2) { 
    MainHome fragment = new MainHome(); 
    Bundle args = new Bundle(); 
    args.putString(ARG_PARAM1, param1); 
    args.putString(ARG_PARAM2, param2); 
    fragment.setArguments(args); 
    return fragment; 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    if (getArguments() != null) { 
     mParam1 = getArguments().getString(ARG_PARAM1); 
     mParam2 = getArguments().getString(ARG_PARAM2); 
    } 
} 


public void onButtonPressed(Uri uri) { 
    if (mListener != null) { 
     mListener.onFragmentInteraction(uri); 
    } 
} 

@Override 
public void onAttach(Context context) { 
    super.onAttach(context); 
    if (context instanceof OnFragmentInteractionListener) { 
     mListener = (OnFragmentInteractionListener) context; 
    } else { 
     throw new RuntimeException(context.toString() 
       + " must implement OnFragmentInteractionListener"); 
    } 
} 

@Override 
public void onDetach() { 
    super.onDetach(); 
    mListener = null; 
} 

/** 
* This interface must be implemented by activities that contain this 
* fragment to allow an interaction in this fragment to be communicated 
* to the activity and potentially other fragments contained in that 
* activity. 
* <p> 
* See the Android Training lesson <a href= 
* "http://developer.android.com/training/basics/fragments/communicating.html" 
* >Communicating with Other Fragments</a> for more information. 
*/ 
public interface OnFragmentInteractionListener { 
    // TODO: Update argument type and name 
    void onFragmentInteraction(Uri uri); 
} 
} 

它顯示錯誤這樣的..

enter image description here

這是我的適配器代碼...

package com.example.yasee.bitescene.adapter; 



import android.app.Activity; 
import android.content.Context; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.BaseAdapter; 
import android.widget.ImageView; 
import android.widget.TextView; 
import android.widget.Toast; 

import com.example.yasee.bitescene.Fragments.MainHome; 
import com.example.yasee.bitescene.R; 
import com.example.yasee.bitescene.Search; 

import java.util.ArrayList; 

public class CustomAdapter extends BaseAdapter { 
    String [] result; 
    Context context; 
    int [] imageId; 
    private static LayoutInflater inflater=null; 

public CustomAdapter(Activity activity, int search_catagory_list, int[] prgmImages, String[] prgmNameList) { 
    // TODO Auto-generated constructor stub 
    result=prgmNameList; 
    context=activity; 
    imageId=prgmImages; 
    inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
} 

@Override 
public int getCount() { 
    // TODO Auto-generated method stub 
    return result.length; 
} 

@Override 
public Object getItem(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

@Override 
public long getItemId(int position) { 
    // TODO Auto-generated method stub 
    return position; 
} 

public class Holder 
{ 
    TextView tv; 
    ImageView img; 
} 
@Override 
public View getView(final int position, View convertView, ViewGroup parent) { 
    // TODO Auto-generated method stub 
    Holder holder=new Holder(); 
    View rowView; 
    rowView = inflater.inflate(R.layout.search_catagory_list, null); 
    holder.tv= (TextView) rowView.findViewById(R.id.textView1); 
    holder.img=(ImageView) rowView.findViewById(R.id.imageView1); 
    holder.tv.setText(result[position]); 
    holder.img.setImageResource(imageId[position]); 
    rowView.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Toast.makeText(context, "You Clicked "+result[position], Toast.LENGTH_LONG).show(); 
     } 
    }); 
    return rowView; 
} 

} 

我的錯誤是...

7月6日至一十三日:31:00.399 3569-3569/com.example.yasee.bitescene E/AndroidRuntime:致命異常:主要 過程:com。示例.yasee.bitescene,PID:3569 java.lang.RuntimeException:無法啓動活動ComponentInfo {com.example.yasee.bitescene/com.example.yasee.bitescene.Search}:java.lang.NullPointerException at android.app .ActivityThread.performLaunchActivity(ActivityThread.java:2195) at android.app.ActivityThread.handleLaunchActivity(ActivityThread .java:2245) at android.app.ActivityThread.access $ 800(ActivityThread.java:135) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage( Handler.java:102) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5017) at java.lang.reflect.Method.invokeNative(本地方法) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) at com.android.internal .os.Zygo teInit.main(ZygoteInit.java:595) at dalvik.system.NativeStart.main(Native Method) 引起:java.lang.NullPointerException at com.example.yasee.bitescene.Fragments.MainHome.onCreateView(MainHome。的java:44) 在android.app.Fragment.performCreateView(Fragment.java:1700) 在android.app.FragmentManagerImpl.moveToState(FragmentManager.java:890) 在android.app.FragmentManagerImpl.moveToState(FragmentManager.java: 1062) at android.app.BackStackRecord.run(BackStackRecord.java:684) at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447) at android.app.Activity.performStart(Activity.java:5240) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245) at android.app.ActivityThread.access $ 800(ActivityThread.java:135) at android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1196) at android.os.Handler.dispatchMessage(Handler。(Native Method)在android.app.ActivityThread.main(ActivityThread.java:5017)處使用 。 ) 在java.lang.reflect.Method.invoke(Method.java:515) 在com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) 在com.android.internal.os .ZygoteInit.main(ZygoteInit.java:595) 在dalvik.system.NativeStart.main(本機方法)

+0

什麼是錯誤信息?指向代碼來查看消息並分享它。 – AndroidMechanic

+0

好吧,我太新,在Android中運行我的應用程序時顯示...不幸停下來。 –

+0

沒關係。但你應該分享你在這裏得到的幫助你的錯誤。在應用程序崩潰時,您在日誌貓(Android Studio底部的Android監視器窗口)中看到的錯誤消息是什麼? – AndroidMechanic

回答

1
lv

似乎是空通向NullPointerException

確保id對於ListView實際上設置爲listView,因爲它預計在下面的行中。還要確保它在佈局內fragment_list

lv = (ListView) v.findViewById(R.id.listView); 
+0

偉大的兄弟我的佈局是改變它的'fragment_main_home' –

0

首先創建一個新的實現方法具d在片段和膨脹等

LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View inflatedView2 = inflater.inflate(R.layout.activity_table_on_off_data, null); 

create a new layout with listview and call it here 

TableReport1 = (ListView) inflatedView2.findViewById(R.id.dataonofflister); 

和使用適配器等

tableReportofOnOffData = new TableReportofOnOffData(mActivity.getApplicationContext(), listData); 
       TableReport1.setAdapter(null); 
       TableReport1.setAdapter(tableReportofOnOffData); 
+1

我不明白你的代碼 –

+0

在createview中創建一個像newloader()之類的片段的新方法,在那個方法中你可以通過膨脹一個新的佈局到我們的佈局 – Narendran

+0

isn 't爲我工作 –

0

在片段

@

Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
          Bundle savedInstanceState) { 
    TableDisplayconditionView(date,getapplicationcontext()); 
    } 

create a new method outside of createview with parameters, 

private void TableDisplayEventData(String date, Context context) { 



    LayoutInflater inflater = (LayoutInflater) mActivity.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     View inflatedView2 = inflater.inflate(R.layout.activity_event_details_data, null); 
     Gallery.removeAllViews(); 
     Gallery.addView(inflatedView2); 

     TableReport2 = (ListView) inflatedView2.findViewById(R.id.dataonofflister); 

tableReportofOnOffData = new TableReportofOnOffData(mActivity.getApplicationContext(), listData); 
       TableReport1.setAdapter(null); 
       TableReport1.setAdapter(tableReportofOnOffData); 
} 

The adapter looks like, 

class TableReportofOnOffData extends BaseAdapter { 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     View view = convertView; 

    if (view == null) { 
     view = lInflater.inflate(R.layout.activity_table_on_off_data_text, parent, false); 
    } 

    ListerOnOffData p = getProduct(position); 
    ListerOnOffData p2 = getProduct(position + 1); 

    ((TextView) view.findViewById(R.id.date)).setText(p.getDate()); 
    ((TextView) view.findViewById(R.id.duration)).setText(p.getDuration()); 
    ((TextView) view.findViewById(R.id.powerfail)).setText(p.getPowerFail()); 
    ((TextView) view.findViewById(R.id.kwh)).setText(p.getKwh()); 

    return view; 
} 

} 
+0

兄弟首先閱讀我的問題,並解決我的問題,如果你不能告訴我嘗試其他方法, –

+0

嗨,你@納蘭德有選擇編輯你以前的答案,不需要寫新的答案。 – MPG

相關問題