如何在android中以片段形式填充自定义列表?
我有一个片段,我想在其中创建一个自定义列表视图,但当我将参数发送到适配器时,它给了我一个错误 这是我的代码片段如何在android中以片段形式填充自定义列表?,android,android-fragments,android-studio,Android,Android Fragments,Android Studio,我有一个片段,我想在其中创建一个自定义列表视图,但当我将参数发送到适配器时,它给了我一个错误 这是我的代码片段 @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_list, container, false); TextVi
@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);
}
}
我的错误是
06-13 07:31:00.399 3569-3569/com.example.yasee.bitescene E/AndroidRuntime:致命异常:main
进程:com.example.yasee.bitescene,PID:3569
java.lang.RuntimeException:无法启动活动组件信息{com.example.yasee.bitescene/com.example.yasee.bitescene.Search}:java.lang.NullPointerException
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2195)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
在android.app.ActivityThread.access$800(ActivityThread.java:135)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5017)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于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(本机方法)
原因:java.lang.NullPointerException
位于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)
运行(BackStackRecord.java:684)
位于android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
位于android.app.Activity.performStart(Activity.java:5240)
在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2168)上
位于android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2245)
在android.app.ActivityThread.access$800(ActivityThread.java:135)
在android.app.ActivityThread$H.handleMessage(ActivityThread.java:1196)上
位于android.os.Handler.dispatchMessage(Handler.java:102)
位于android.os.Looper.loop(Looper.java:136)
位于android.app.ActivityThread.main(ActivityThread.java:5017)
位于java.lang.reflect.Method.Invokenactive(本机方法)
位于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(本机方法)
首先在片段中创建一个新方法并像膨胀一样膨胀
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);
零碎
@
lv
似乎为空,导致出现NullPointerException
确保ListView
的id
实际设置为ListView
,如下行所示。还要确保它在布局fragment\u列表中
lv = (ListView) v.findViewById(R.id.listView);
错误消息是什么?指向代码以查看消息并共享它。好吧,当运行我的应用程序it show时,我对android太陌生了。。。不幸的是,我停了下来,没关系。但是你应该
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;
}
}
lv = (ListView) v.findViewById(R.id.listView);