Sim
Sim

Reputation: 231

Adding item to listview through a dialog

I'm using a custom listview which I want to add an item to my listview. But it seems to be skipping all the code to add the item. Can someone please tell me how I should adjust my code to achieve this.

Thank you in advance.

This is my Main Activity in which I call a custom Dialog

public class MainActivity extends ActionBarActivity {
    TextView threadId;
    ArrayList<MessageItem> items = new ArrayList<MessageItem>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button newMessage = (Button) findViewById(R.id.new_message_button);
        final Context context = this;

        final ListView listView = (ListView) this.findViewById(R.id.messagingListView);
        final ActivityAdapter itemAdapter = new ActivityAdapter(getApplicationContext(), this.MessageFeedData());

        listView.setAdapter(itemAdapter);

        listView.setTextFilterEnabled(true);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            public void onItemClick(AdapterView<?> parent, View view,
                                    int position, long id) {

                listView.getAdapter().getItem(position);

                MessageItem itemAtPos = (MessageItem) parent.getItemAtPosition(position);
                Intent intent = new Intent(MainActivity.this, ConversationView.class);
                intent.putExtra("threadId", String.valueOf(itemAtPos.ThreadId));
                startActivity(intent);
            }
        });

        newMessage.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                // custom dialog
                final Dialog dialog = new Dialog(context);
                dialog.setContentView(R.layout.write_message_layout);
                dialog.setTitle("Title...");

                // set the custom dialog components - text, image and button
                final Button post_button = (Button) dialog.findViewById(R.id.button_post);
                final EditText new_write_message = (EditText) dialog.findViewById(R.id.messge_msg);
                final EditText to_message = (EditText) dialog.findViewById(R.id.to_newmsg);

                post_button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {

                        items.add(new MessageItem(5458, to_message.getText().toString(), "imh", DateTime.now(), new_write_message.getText().toString()));

                        itemAdapter.notifyDataSetChanged();

                        if (v.getId() == R.id.button_post);
                        to_message.setText("");
                        new_write_message.setText("");


                    }
                });

                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        Toast.makeText(MainActivity.this, "Clicked", Toast.LENGTH_LONG)
                                .show();
                    }
                });

                dialog.show();
            }
        });

    }


    public ArrayList<MessageItem> MessageFeedData() {
        ArrayList<MessageItem> items = new ArrayList<MessageItem>();

        //recieved_item_click_actions fields
        items.add(new MessageItem(1, "Bob Doe", "image", DateTime.now(), "Hello how are you?"));
        items.add(new MessageItem(200, "Simon Pink", "image", DateTime.now(), "Hello what are you doing"));

        return items;
    }


    class ActivityFeedTask extends AsyncTask<Integer, Void, Void> {

        ArrayList<MessageItem> recentTracks;

        @Override
        protected Void doInBackground(Integer... page) {
            try {
                recentTracks = new ArrayList<MessageItem>();

                Thread.sleep(3000);

                MessageItem data = null;
                for (int i = 0; i < 10; i++) {

                    recentTracks.add(data);
                }
            } catch (Exception e) {
            }

            return null;
        }

    }

    public class ActivityAdapter extends ArrayAdapter<MessageItem> {
        private final Context context;
        private final ArrayList<MessageItem> items;
        //private int currentPage = 0;

        public ActivityAdapter(Context context, ArrayList<MessageItem> recentTrackArrayList) {
            super(context, 0, recentTrackArrayList);
            this.context = context;
            this.items = recentTrackArrayList;
        }


        public View getView(int position, View convertView, ViewGroup parent) {
            View rowView;


            {
                LayoutInflater inflater = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);


                convertView = getLayoutInflater().inflate
                        (R.layout.message_list_item, parent, false);

                rowView = convertView;

                TextView comment2 = (TextView) rowView
                        .findViewById(R.id.messaging_username);
                comment2.setText(items.get(position).Username);

                ImageView comment3 = (ImageView) rowView
                        .findViewById(R.id.messaging_photo);
                if (items.get(position).Image == null) {
                    comment3.setImageResource(R.drawable.ic_launcher);
                }

                TextView comment4 = (TextView) rowView
                        .findViewById(R.id.messaging_date);
                comment4.setText(items.get(position).DateTimeStamp.toString());

                TextView comment5 = (TextView) rowView
                        .findViewById(R.id.messaging_string);
                comment5.setText(items.get(position).MessageString);

            }
            return convertView;
        }

    }

}

This is my custom Dialog

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content">


    <EditText
        android:id="@+id/to_newmsg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TO" />

    <EditText
        android:id="@+id/messge_msg"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/to_newmsg"
        android:text="MESSAGE" />


    <Button
        android:id="@+id/button_post"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/messge_msg"
        android:text="Send" />

</RelativeLayout>

Upvotes: 0

Views: 358

Answers (1)

Raghunandan
Raghunandan

Reputation: 133560

You have this

 ArrayList<MessageItem> items = new ArrayList<MessageItem>();

before onCreate

while this

 ArrayList<MessageItem> items = new ArrayList<MessageItem>();

in MessageFeedData() is local.

Use a single list and add items to the same then call notifyDateSetChanged() to refresh listview.

As you can see you do not use items as an arg to constructor

 final ActivityAdapter itemAdapter = new ActivityAdapter(getApplicationContext(), this.MessageFeedData());

Edit:

final ListView listView = (ListView) this.findViewById(R.id.messagingListView);
items = this.MessageFeedData());
final ActivityAdapter itemAdapter = new ActivityAdapter(getApplicationContext(), items);

Upvotes: 2

Related Questions