添加动态值在片段的ListView [英] Adding Dynamic values to listview in Fragment
问题描述
我要补充微调值ListView控件按钮点击的片段。其实我的屏幕包含两个微调和列表视图。我只是想微调值添加到按钮单击列表。我已经写了一些$ C $下,但荫获得空指针异常在里面。这里是我的code:
I want to add spinner values to listview on button click in fragment. Actually my screen contain two spinner and a listview. I just want to add spinner values to the list on button click. I have written some code for it but Iam getting null pointer exception in it. here is my code:
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_thirdswipe, container, false);
arraylistAdd = new ArrayList<DeviceInfo>();
spinner = (Spinner) rootView.findViewById(R.id.spnDevice);
spinnerArrayAdapter = new ArrayAdapter<String>(rootView.getContext(), R.layout.spinner_items, spinnerArray); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);
spinner = (Spinner) rootView.findViewById(R.id.spnAction);
spinnerArrayAdapter = new ArrayAdapter<String>(rootView.getContext(), R.layout.spinner_items, spinnerArray); //selected item will look like a spinner set from XML
spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(spinnerArrayAdapter);
btnAdd = (Button) rootView.findViewById(R.id.buttonAdd);
listOnAdd = (ListView) rootView.findViewById(R.id.listDynamic);
deviceType = spinner.getSelectedItem().toString();
actionType = spinner.getSelectedItem().toString();
Log.i("item", deviceType +" "+ actionType);
adp=new CustomListDynamic(getActivity(),R.layout.custom_add_list,arraylistAdd);
btnAdd.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
info = new DeviceInfo();
info.setAction(actionType);
info.setDevice(deviceType);
arraylistAdd.add(info);
for(int i=0;i<arraylistAdd.size();i++){
Log.i("itemArray", arraylistAdd.get(i).getDevice());
}
adp.notifyDataSetChanged();
}
});
listOnAdd.setAdapter(adp);
return rootView;
}
我的customAdpter类是如下:
My customAdpter class is following:
public class CustomListDynamic extends ArrayAdapter<DeviceInfo> {
Context context;
List<DeviceInfo> objects;
int layoutResourceId;
public CustomListDynamic(Context context, int layoutResourceId,
List<DeviceInfo> rowItems) {
super(context, layoutResourceId, rowItems);
this.context = context;
this.layoutResourceId = layoutResourceId;
objects = rowItems;
}
@Override
public int getCount() {
return objects.size();
}
@Override
public long getItemId(int position) {
return position;
}
private class ViewHolder {
TextView txtDeviceType;
TextView txtActionType;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
final DeviceInfo rowItem = getItem(position);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.custom_add_list, null);
holder = new ViewHolder();
holder.txtDeviceType = (TextView) convertView.findViewById(R.id.txtDeviceType);
holder.txtDeviceType = (TextView) convertView.findViewById(R.id.txtMobileNumber);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.txtDeviceType.setText(rowItem.getDevice());
holder.txtActionType.setText(rowItem.getAction());
Log.i("device set", rowItem.getDevice());
return convertView;
}
}
logcat的:
Logcat:
05-20 18:41:49.301: E/AndroidRuntime(2083): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
05-20 19:08:34.661: E/AndroidRuntime(2439): FATAL EXCEPTION: main
05-20 19:08:34.661: E/AndroidRuntime(2439): java.lang.NullPointerException
05-20 19:08:34.661: E/AndroidRuntime(2439): at com.example.test.CustomListDynamic.getView(CustomListDynamic.java:66)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.AbsListView.obtainView(AbsListView.java:2159)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.ListView.makeAndAddView(ListView.java:1831)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.ListView.fillDown(ListView.java:674)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.ListView.fillFromTop(ListView.java:735)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.ListView.layoutChildren(ListView.java:1638)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.AbsListView.onLayout(AbsListView.java:1994)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.view.View.layout(View.java:14008)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.view.ViewGroup.layout(ViewGroup.java:4373)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1663)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1521)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.LinearLayout.onLayout(LinearLayout.java:1434)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.view.View.layout(View.java:14008)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.view.ViewGroup.layout(ViewGroup.java:4373)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1021)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.view.View.layout(View.java:14008)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.view.ViewGroup.layout(ViewGroup.java:4373)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.view.View.layout(View.java:14008)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.view.ViewGroup.layout(ViewGroup.java:4373)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1141)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.view.View.layout(View.java:14008)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.view.ViewGroup.layout(ViewGroup.java:4373)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.widget.FrameLayout.onLayout(FrameLayout.java:448)
05-20 19:08:34.661: E/AndroidRuntime(2439): at android.view.View.layout(View.java:14008)
请让我知道了解决方案,如果有人has..thanks
Please let me know the solution if anybody has..thanks
推荐答案
试着改变你的code本,
try change your code with this,
public class CustomListDynamic extends ArrayAdapter<DeviceInfo> {
Context context;
List<DeviceInfo> objects;
int layoutResourceId;
public CustomListDynamic(Context context, int layoutResourceId,
List<DeviceInfo> rowItems) {
super(context, layoutResourceId, rowItems);
this.context = context;
this.layoutResourceId = layoutResourceId;
objects = rowItems;
}
private class ViewHolder {
TextView txtDeviceType;
TextView txtActionType;
}
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;
DeviceInfo rowItem = object.get(position);
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.custom_add_list, null);
holder = new ViewHolder();
holder.txtDeviceType = (TextView) convertView.findViewById(R.id.txtDeviceType);
holder.txtDeviceType = (TextView) convertView.findViewById(R.id.txtMobileNumber);
convertView.setTag(holder);
} else
holder = (ViewHolder) convertView.getTag();
holder.txtDeviceType.setText(rowItem.getDevice());
holder.txtActionType.setText(rowItem.getAction());
Log.i("device set", rowItem.getDevice());
return convertView;
}
}
更改:
删除 getItemId
和 getCount将
,因为你并不需要在 ArrayAdapter $千万C $ C>,你需要那些在
BaseAdapter
类,超
的构造函数的类句柄
remove getItemId
and getCount
because you don't needed on ArrayAdapter
, you need those in BaseAdapter
class, super
on constructor class handle that
变更
final DeviceInfo rowItem = getItem(position);
到
DeviceInfo rowItem = objects.get(position);
更新
如果你有一个错误
"holder.txtActionType.setText(rowItem.getAction());"
3可能性是存在的。
3 possibility exists.
1 holder.txtActionType
为null
2 - rowItem
为null
2- rowItem
is null
3 rowItem.getAction()
为null
您的问题:
您不能初始化 holder.txtActionType
在code。
you not initialize holder.txtActionType
in your code.
我认为这是复制粘贴的问题:
i think this is copy paste problem:
holder.txtDeviceType = (TextView) convertView.findViewById(R.id.txtDeviceType);
holder.txtDeviceType = (TextView) convertView.findViewById(R.id.txtMobileNumber);
这两个行初始化 txtDeviceType
其中一人必须为 holder.txtActionType
这篇关于添加动态值在片段的ListView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!