Question

Sorry the title is pretty bad,

Basically I have an adapter aa = new tweetAdapter(this, resID, tweetListFull); which only updates after I use aa.add and then aa.notifyDataSetChanged() my understanding is that this should work with tweetListFull.add and then aa.notifyDataSetChanged() aswell...

So when I use aa.add(tweetListFull.get(0)) and aa.notifyDataSetChanged() the view is added as expected. Although From what I thought I thought that adding items to the tweetListFull list sand then aa.notifyDataSetChanged() should also work but it doesn't?

MainActivity

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    render = new tweetView(this);

    LinearLayout canvas = (LinearLayout)findViewById(R.id.content_frame);
    ListView tweetList = (ListView)findViewById(R.id.tweetView);

    tweetListFull = new ArrayList<Tweet>();
    int resID = R.layout.tweet;
    aa = new tweetAdapter(this, resID, tweetListFull);

    Log.w("Check","Here1");        
    tweetList.setAdapter(aa);
    Log.w("Check","Here1");
    //tweetList.addView()
    canvas.addView(render);



    // UI //        
    drawerListViewItems = getResources().getStringArray(R.array.items); 
    // get ListView defined in activity_main.xml
    drawerListView = (ListView) findViewById(R.id.left_drawer); 
    // Set the adapter for the list view
    drawerListView.setAdapter(new ArrayAdapter<String>(this,R.layout.drawer_listview_item, drawerListViewItems));



    Button.OnClickListener listener = new Button.OnClickListener(){
        @Override
        public void onClick(View v) {
            if(v.getId() == R.id.Refresh){                  
                twitterTest tweet = new twitterTest();
                tweet.execute(-3.19523741,56.21523879); // The argument for this is the query to search for.
            }
            else if(v.getId() == R.id.Load){
                Log.w("Load1",String.valueOf(tweetListFull));
                Log.w("Load1",String.valueOf(tweetListFull.size()));
                //aa.add(tweetListFull.get(2));
                aa.notifyDataSetInvalidated();
                aa.notifyDataSetChanged();
            }               
        }
    };
    ((Button)findViewById(R.id.Refresh)).setOnClickListener(listener);  
    ((Button)findViewById(R.id.Load)).setOnClickListener(listener);  
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main, menu);
    return true;
}

tweetAdapter

package com.example.networkingcoursework;

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

import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.LinearLayout;
import android.widget.TextView;

public class tweetAdapter extends ArrayAdapter<Tweet>{

int resource;

public tweetAdapter(Context _context, int _resource,ArrayList<Tweet> _objects) {
    super(_context, _resource, _objects);
    resource = _resource;
    Log.w("Test222","Test3:"+String.valueOf(_resource));
    Log.w("Test222","Test3:"+String.valueOf(_objects.size()));

    // TODO Auto-generated constructor stub
}


@Override
public View getView(int position, View convertView, ViewGroup parent){
    Log.w("Test222","Test22!");
    LinearLayout tweetView;
    Tweet tweet = getItem(position);
    Log.w("Test222","Test!");

    long tweetId = tweet.getId();

    if(convertView == null){
        tweetView = new LinearLayout(getContext());
        String inflater = Context.LAYOUT_INFLATER_SERVICE;
        LayoutInflater vi = (LayoutInflater)getContext().getSystemService(inflater);
        vi.inflate(resource,tweetView, true);
    }
    else{
        tweetView = (LinearLayout) convertView;     
    }

    TextView idView = (TextView)tweetView.findViewById(R.id.tweetText);
    idView.setText(String.valueOf(tweetId));
    Log.w("Test222","Test!");
    return tweetView;

}

}

Was it helpful?

Solution

notifyDataSetChanged only works when you add one or more items to tweetListFull; you can do something like this:

((Button)findViewById(R.id.Load)).setOnClickListener(new OnClickListener() {
            public void onClick(View v) {
                 tweetListFull.add(yourNewItem);
                 aa.notifyDataSetChanged();
            }
        });

}

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top