1

How do I draw the values from objects that I construct with a dialog and put them into a listview.

For instance; I have an object called

digitalControlObject(int, int, bool, bool).

Now when the user constructs these objects via a dialog box with corresponding input UI to (int, int, bool, bool)

I want to take those objects and add them to a listview - which will then fill in four rows for that object with the corresponding (int, int, bool, bool)

For instance Row one would be like this:

Table Row |Pin Number |Pin Type |Pin Status |Pin Mode
------------------------------------------------------
Row 1     | 13        | 0       | ON        | ON

So; for instance, whenever I hit a button that is next to the listview; the dialog box will appear and allow for me to construct another digitalControlObject... then when I submit that dialog box it should append another row in alignment with that data set.

EDIT:

So I tried this as code:

    package com.example.ioiocontroller;

import java.util.ArrayList;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.ListView;

public class digitalFragment extends Fragment {
    ArrayList<digitalControlObject> digitalList;
    ListView digitalListView;
    View digitalFragmentView;
    ArrayAdapter listAdapter;
    Button addDigital;
    Button removeDigital;
    public digitalFragment() {
        // TODO Auto-generated constructor stub
    }

    public View onCreateView(LayoutInflater viewInflation, ViewGroup container,
            Bundle SavedInstantState) {



        digitalFragmentView = viewInflation.inflate(
                R.layout.digitalfragment_page, container, false);

        addDigital = (Button) digitalFragmentView
                .findViewById(R.id.digitalAddition);
        removeDigital = (Button) digitalFragmentView
                .findViewById(R.id.digitalRemoval);
        digitalListView = (ListView) digitalFragmentView
                .findViewById(R.id.digitalListView);

        // ADDITION CLICK METHOD FOR DIGITAL IO
        addDigital.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                    listAdapter = new ArrayAdapter(getActivity(), R.layout.digitallistview_layout);
                    digitalListView.setAdapter(listAdapter);
                    digitalList.add(new digitalControlObject(0, true, true, 0));


                    listAdapter.notifyDataSetChanged();
                // create and pass the digitalControlObject to the main activity

            }
        });

        // REMOVAL CLICK METHOD FOR DIGITAL IO
        removeDigital.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

        return digitalFragmentView;
    }

    public ListView getDigitalListView() {
        return digitalListView;
    }

    public void setDigitalListView(ListView digitalListView) {
        this.digitalListView = digitalListView;
    }

    public View getDigitalFragmentView() {
        return digitalFragmentView;
    }

    public void setDigitalFragmentView(View digitalFragmentView) {
        this.digitalFragmentView = digitalFragmentView;
    }

}

However when I compile and run and hit the button for the onclick view I get a nullpointer error?

EDIT 2:

Even with those changes it doesn't work; here's my most recent code ... I still get a nullpointer

public View onCreateView(LayoutInflater viewInflation, ViewGroup container,
            Bundle SavedInstantState) {

        digitalFragmentView = viewInflation.inflate(
                R.layout.digitalfragment_page, container, false);

        addDigital = (Button) digitalFragmentView
                .findViewById(R.id.digitalAddition);
        removeDigital = (Button) digitalFragmentView
                .findViewById(R.id.digitalRemoval);
        digitalListView = (ListView) digitalFragmentView
                .findViewById(R.id.digitalListView);
        listAdapter = new ArrayAdapter(getActivity(), R.id.digitalListView);
        digitalListView.setAdapter(listAdapter);

        // ADDITION CLICK METHOD FOR DIGITAL IO
        addDigital.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                digitalList.add(new digitalControlObject(0, true, true, 0));

                listAdapter.notifyDataSetChanged();
                // create and pass the digitalControlObject to the main activity

            }
        });

        // REMOVAL CLICK METHOD FOR DIGITAL IO
        removeDigital.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

        return digitalFragmentView;
    }

Layout screenshot

EDIT 3:

With this latest code I get an instantaneous crash

    package com.example.ioiocontroller;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;

public class digitalFragment extends Fragment {
    ArrayList<String> digitalList;
    ListView digitalListView;
    View digitalFragmentView;
    Button addDigital;
    Button removeDigital;

    public digitalFragment() {
        // TODO Auto-generated constructor stub
    }

    public View onCreateView(LayoutInflater viewInflation, ViewGroup container,
            Bundle SavedInstantState) {

        digitalFragmentView = viewInflation.inflate(
                R.layout.digitalfragment_page, container, false);

        addDigital = (Button) digitalFragmentView
                .findViewById(R.id.digitalAddition);
        removeDigital = (Button) digitalFragmentView
                .findViewById(R.id.digitalRemoval);
        digitalListView = (ListView) digitalFragmentView
                .findViewById(R.id.digitalListView);
        final MyAdapter adapter = new MyAdapter(getActivity(), R.id.title, digitalList);
        digitalListView.setAdapter(adapter);;

        // ADDITION CLICK METHOD FOR DIGITAL IO
        addDigital.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                digitalList.add("TEST");

                adapter.notifyDataSetChanged();
                // create and pass the digitalControlObject to the main activity

            }
        });

        // REMOVAL CLICK METHOD FOR DIGITAL IO
        removeDigital.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

            }
        });

        return digitalFragmentView;
    }

    public ListView getDigitalListView() {
        return digitalListView;
    }

    public void setDigitalListView(ListView digitalListView) {
        this.digitalListView = digitalListView;
    }

    public View getDigitalFragmentView() {
        return digitalFragmentView;
    }

    public void setDigitalFragmentView(View digitalFragmentView) {
        this.digitalFragmentView = digitalFragmentView;
    }
//////////////////////////////////////////////////////////////////////////////////
    public class MyAdapter extends ArrayAdapter<String> {

        private Context context;

        public MyAdapter (Context context, int textViewResourceId, List<String> items) {
            super(context, textViewResourceId, items);
            this.context = context;
        }

        public View getView(int position, View convertView, ViewGroup parent) {
            View view = convertView;
            if (view == null) {
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                view = inflater.inflate(R.layout.item_row, null);
            }

            String item = getItem(position);
            if (item!= null) {
                TextView itemView = (TextView) view.findViewById(R.id.title);
                if (itemView != null) {
                    itemView.setText("Item: " + item + " in position " + position);
                }
             }

            return view;
        }
    }

}

Here is the logcat:

02-27 12:58:10.173: E/Trace(9958): error opening trace file: No such file or directory (2)
02-27 12:58:10.173: D/jdwp(9958): sendBufferedRequest : len=0x4B
02-27 12:58:10.190: D/dalvikvm(9958): open_cached_dex_file : /data/app/com.example.ioiocontroller-1.apk /data/dalvik-cache/data@app@com.example.ioiocontroller-1.apk@classes.dex
02-27 12:58:10.193: D/ActivityThread(9958): BIND_APPLICATION handled : 0 / AppBindData{appInfo=ApplicationInfo{417cecb8 com.example.ioiocontroller}}
02-27 12:58:10.262: D/dalvikvm(9958): GC_FOR_ALLOC freed 54K, 11% free 6279K/7027K, paused 19ms, total 19ms
02-27 12:58:10.268: I/dalvikvm-heap(9958): Grow heap (frag case) to 7.678MB for 1536016-byte allocation
02-27 12:58:10.289: D/dalvikvm(9958): GC_FOR_ALLOC freed 1K, 10% free 7778K/8567K, paused 20ms, total 20ms
02-27 12:58:10.310: D/dalvikvm(9958): GC_CONCURRENT freed <1K, 10% free 7778K/8567K, paused 2ms+2ms, total 21ms
02-27 12:58:10.337: D/ActivityThread(9958): ACT-AM_ON_RESUME_CALLED ActivityRecord{417d02e0 token=android.os.BinderProxy@417cfaa8 {com.example.ioiocontroller/com.example.ioiocontroller.MainActivity}}
02-27 12:58:10.344: D/ActivityThread(9958): ACT-LAUNCH_ACTIVITY handled : 0 / ActivityRecord{417d02e0 token=android.os.BinderProxy@417cfaa8 {com.example.ioiocontroller/com.example.ioiocontroller.MainActivity}}
02-27 12:58:10.365: D/AbsListView(9958): checkAbsListViewlLogProperty get invalid command
02-27 12:58:10.366: D/AndroidRuntime(9958): Shutting down VM
02-27 12:58:10.366: W/dalvikvm(9958): threadid=1: thread exiting with uncaught exception (group=0x411b7908)
02-27 12:58:10.370: E/AndroidRuntime(9958): FATAL EXCEPTION: main
02-27 12:58:10.370: E/AndroidRuntime(9958): java.lang.NullPointerException
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.widget.ArrayAdapter.getCount(ArrayAdapter.java:330)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.widget.ListView.setAdapter(ListView.java:466)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at com.example.ioiocontroller.digitalFragment.onCreateView(digitalFragment.java:41)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.support.v4.view.ViewPager.populate(ViewPager.java:1068)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.support.v4.view.ViewPager.populate(ViewPager.java:914)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.support.v4.view.ViewPager.onMeasure(ViewPager.java:1436)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.View.measure(View.java:15264)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4918)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.View.measure(View.java:15264)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.widget.LinearLayout.measureVertical(LinearLayout.java:833)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.widget.LinearLayout.onMeasure(LinearLayout.java:574)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.View.measure(View.java:15264)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:4918)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.widget.FrameLayout.onMeasure(FrameLayout.java:310)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at com.android.internal.policy.impl.PhoneWindow$DecorView.onMeasure(PhoneWindow.java:2163)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.View.measure(View.java:15264)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.ViewRootImpl.performMeasure(ViewRootImpl.java:2131)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.ViewRootImpl.measureHierarchy(ViewRootImpl.java:1242)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1435)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1127)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4650)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.Choreographer$CallbackRecord.run(Choreographer.java:747)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.Choreographer.doCallbacks(Choreographer.java:567)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.Choreographer.doFrame(Choreographer.java:536)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:733)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.os.Handler.handleCallback(Handler.java:615)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.os.Handler.dispatchMessage(Handler.java:92)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.os.Looper.loop(Looper.java:153)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at android.app.ActivityThread.main(ActivityThread.java:4987)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at java.lang.reflect.Method.invokeNative(Native Method)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at java.lang.reflect.Method.invoke(Method.java:511)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:821)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:584)
02-27 12:58:10.370: E/AndroidRuntime(9958):     at dalvik.system.NativeStart.main(Native Method)
Timothy Frisch
  • 2,995
  • 2
  • 30
  • 64

2 Answers2

2

You should create a ListView with a custom row layout with four TextViews where you can put the data. Some examples here and here. On this way you can create something like this:

enter image description here

Then you just have to keep adding data to your ListAdapter to add new rows to the ListView


Responding to your edited answer, without Logcat is a guess, I think the problem is here:

listAdapter = new ArrayAdapter(getActivity(), R.layout.digitallistview_layout);

The best way to test this is creating a simple adapter with a row_layout.xml for each row in the ListView:

public class MyAdapter extends ArrayAdapter<String> {

    private Context context;

    public MyAdapter (Context context, int textViewResourceId, List<String> items) {
        super(context, textViewResourceId, items);
        this.context = context;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.item_row, null);
        }

        String item = getItem(position);
        if (item!= null) {
            TextView itemView = (TextView) view.findViewById(R.id.title);
            if (itemView != null) {
                itemView.setText("Item: " + item + " in position " + position);
            }
         }

        return view;
    }
}

This will be your xml item_row.xml layout:

<?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"
    android:orientation="vertical" >

<TextView 
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/title"/>

</LinearLayout>

So to use this:

digitalList.add(new digitalControlObject(0, true, true, 0));

MyAdapter adapter = new MyAdapter(getActivity(), R.id.title, digitalList);
digitalListView.setAdapter(adapter);

And this digitalList has to be inside your digitalfragment_page layout because is the one you are inflating in your Fragment

Community
  • 1
  • 1
Andres
  • 6,080
  • 13
  • 60
  • 110
1

You need to define a layout with textviews required along with layout with listview. And for the updating of the list automatically, you should give onclicklistener to come to same page using intent

 public class showList extends Activity{

            @Override
        protected void onCreate(Bundle savedInstanceState) {
            // TODO Auto-generated method stub
            super.onCreate(savedInstanceState);
            setContentView(R.layout.showlist);
            ListView myListView = (ListView) findViewById(R.id.listView);
            ArrayList<HashMap<String, String>> arrayList = new ArrayList<HashMap<String, String>>();
                HashMap<String, String> hashMap = new HashMap<String, String>();
                int field1 = //value from dialog
                int field2 = //value from dialog
                boolean flag1 = //value from dialog
                boolean flag2 = //value from dialog
                hashMap.put("FIELD1", field1+"" );
                hashMap.put("FIELD2", field2+"" );
                hashMap.put("FLAG1", flag1+"" );
                hashMap.put("FLAG2", flag2+"" );
                arrayList.add(hashMap);
            ListAdapter listAdapter = new SimpleAdapter(showList.this, arrayList, R.layout.mylayout, new String[]{"FIELD1","FIELD2","FLAG1","FLAG2"},new int[]{R.id.textviewforfield1,R.id.textviewforfield2,R.id.textviewforflag1,R.id.textviewforflag2} );
            myListView.setAdapter(listAdapter);
        }
    }
Nabin
  • 11,216
  • 8
  • 63
  • 98