添加动态值在片段的Lis​​tView [英] Adding Dynamic values to listview in Fragment

查看:100
本文介绍了添加动态值在片段的Lis​​tView的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我要补充微调值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 ,你需要那些在 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

这篇关于添加动态值在片段的Lis​​tView的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆