Android :: Scroll ListView With Custom Adapter - Too Fast
Aug 4, 2010
I have a listview with a custom arrayadapter that handles about 15 strings. The style of each row alternates (between labels and values for those labels--for example row 1 could be "email address" and row 2 would be the actual email address). I'm changing the style of each row to alternate like this in the arrayadapter's getView() method. So if the item at the current position is a label, I'll change the styling from the default row style (which is what the values have applied to them). When the listview first loads, the styling is perfect and just how I want it to be. If I scroll the list slowly up or down, it stays that way. However, if I scroll the list fast up and down, the styling of the value rows starts changing to that of the label ones until all of the rows have the styling of a label row. I've used custom adapters on other listviews in the app with no problems like this. Found out that it also changes all of the rows to the label styling on portrait->landscape orientation changes. Doesn't do this on landscape->portrait changes. Below is the adapter I'm using.
public class DetailsAdapter extends ArrayAdapter<String> { private TextView text = null; private String item = null;
public DetailsAdapter(Context context, int resource, int textViewResourceId, String[] objects) { super(context, resource, textViewResourceId, objects);
} @Override public View getView(int position, View convertView, ViewGroup parent) { text = (TextView) super.getView(position, convertView, parent); item = getItem(position);
if (item.equals("Name") || item.equals("Mobile") || item.equals("Home") || item.equals("Email") || item.equals("Address")) { text.setBackgroundColor(0xFF575757); text.setTextSize(15);
text.setTypeface(null, Typeface.BOLD); text.setPadding(8, 5, 0, 5);
} else { text.setPadding(15, 15, 0, 15); } return text;
} @Override public boolean isEnabled(int position) { item = getItem(position);
if (item.equals("Name") || item.equals("Mobile") || item.equals("Home") || item.equals("Email") || item.equals("Address")) { return false;
} else { return true; } } }
View 1 Replies
May 3, 2010
How can I set custom thumb for fast scroll in listview.
View 2 Replies
View Related
Jun 18, 2010
I have seen examples implementing a custom Filter. The Android developer docs talk about implementing a Filterable interface. Does anyone have any advice and/or sample code on the best way to implement filtering in a ListView ?
View 2 Replies
View Related
Jul 1, 2010
I'm making a custom adapter so that I can display a list of items with icons which looks like the menu that comes up when you long click the home screen. For some reason though the list items are not clickable. The can be navigated to with the D-pad but they cannot be clicked in any way. I thought maybe the problem was with the AlertDialog I was using so I replaced a working adapter I had elsewhere but I have the same issue there. My adapter looks like this:
ArrayList<IconListItem> mItems; LayoutInflater mInflater;
public IconListAdapter(Context context, ArrayList<IconListItem> items) {
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mItems = items;
} public IconListAdapter(Context context) {
this(context, new ArrayList<IconListItem>());
} public void add(IconListItem item) { mItems.add(item);
notifyDataSetChanged(); return item;
} public void remove(IconListItem item) { mItems.remove(item); notifyDataSetChanged();
} @Override public int getCount() { return mItems.size();
} @Override public IconListItem getItem(int position) { return mItems.get(position);
} @Override public long getItemId(int position) { return position;
} @Override public View getView(int position, View convertView, ViewGroup parent) { View view;
if(convertView == null){ view = mInflater.inflate(R.layout.two_line_icon_list_item, null);
} else { view = convertView; } IconListItem item = mItems.get(position);
TextView lineOne = (TextView) view.findViewById(R.id.firstLine);
TextView lineTwo = (TextView) view.findViewById(R.id.secondLine);
ImageView iconImage = (ImageView) view.findViewById(R.id.icon);
lineOne.setVisibility(View.VISIBLE); lineTwo.setVisibility(View.VISIBLE);
iconImage.setVisibility(View.VISIBLE); lineOne.setText(item.getText());
if (item.getSubtext() == null) lineTwo.setVisibility(View.GONE);
else lineTwo.setText(item.getSubtext());
if (item.getIcon() == null) iconImage.setVisibility(View.GONE);
else iconImage.setImageDrawable(item.getIcon());
return view; }
And the XML it's inflating:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent" android:padding="6dip" >
<ImageView android:id="@+id/icon" android:layout_width="wrap_content"
android:layout_height="fill_parent" android:layout_marginRight="6dip" />
<LinearLayout android:orientation="vertical" android:layout_width="wrap_content"
android:layout_weight="1" android:layout_height="fill_parent" >
<TextView android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_weight="1"android:gravity="center_vertical"
android:id="@+id/firstLine" android:ellipsize="marquee" android:inputType="text" />
<TextView android:layout_width="wrap_content" android:layout_height="0dip"
android:layout_weight="1" android:ellipsize="marquee"
android:id="@+id/secondLine" android:inputType="text" />
</LinearLayout> </LinearLayout>
When I say they are not clickable, I mean that they items do not highlight in orange when I press them nor does onItemClick ever get called. In my code I have this, a different adapter for another purpose and it works perfectly
this.foos= foos; fa = new FooAdapter(this.foos); fooList.setAdapter(fa);
// View the details for an item when it is selected
fooList.setOnItemClickListener(new OnItemClickListener() {
@Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
Intent i = new Intent(MyActivity.this, MyOtherActivity.class);
i.putExtra("foo", ((fooAdapter)arg0.getAdapter()).getItem(arg2));
i.putExtra("list_position", arg2);
MyActivity.this.startActivityForResult(i, 0);
} } );
But when I swap out the first 3 lines for
IconListAdapter ila = new IconListAdapter(this);
ila.add(0, "Test 1", android.R.drawable.ic_menu_mylocation);
ila.add(0, "Test 2", android.R.drawable.ic_menu_edit);
ila.add(0, "Test 3", android.R.drawable.ic_menu_search);
groupList.setAdapter(ila);
I t stops working.
View 2 Replies
View Related
Nov 1, 2010
I have a listView using a custom adapter. Each row contains a button and some other Views. I want to be able to click either on the button, or on the row itself (to edit the item of the list that is clicked).
Setting an onItemClickListener in the activity won't work because of this problem
I think I have to set an onClickListener in the getView() method of my adapter for it to work properly.
I would like to use my activity's onClickListener, in order to use a startActivityForResult() when the row is clicked, in order to have something returned to my activity when the item edition activity is over.
How can I do that?
View 1 Replies
View Related
Jul 3, 2010
I'd like to make a list adapter that formats views like this:
I want to be able to fire a different onClick when the user clicks the image. I have defined the onClick on the image itself in the getView() override, but how do I then get the position of the line that was clicked so I can update the record in the database to record the action?
View 1 Replies
View Related
Jul 30, 2010
In an application I have a Spinner that has tens of items.When the user taps on the spinner, a popup dialog appears that shows the list of possible selections. However, since there are (sorted) tens of items, I want the user to be able to use the fast-scroll thumb (like fastScrollEnabled attribute on ListView), similar to the one enabled in Contacts application.I tried to get the ListView that is used in that pop-up dialog, but I didn't find any methods to do that.
View 1 Replies
View Related
Jul 26, 2010
can anyone tell me what im doing wrong with my cursorAdapter? its making my display choppy when i scroll. I used to have it within a getview but was ripped (rightfully so) on IRC several times because thats not the right place for it. Im still learning and just trying to correctly wrap my head around things.
http://pastebin.com/Dc5ppHUM
View 3 Replies
View Related
Oct 2, 2009
How to load data in expandable List Adapter through Scroll .
Means I want to add data as per Scrolling in Run time.
View 1 Replies
View Related
May 18, 2009
I have ListActivity to show a custom list. The adapter for this list is a complex layout only known for each row at runtime depending on data gathered in a previous activity. The question I have is simple. I know it takes 4-6 seconds to prepare the adapter for the rows that will be visible (first 10), however I would like to let the user know by means of the empty list functionality or otherwise. At present the ListActivity is launched via a button on a previous activity and when that button is clicked the new activity will not be loaded until the adapter is completed, and the user is stuck with the previous activity until this happens. Code...
View 5 Replies
View Related
Jan 7, 2010
In a ListView/CursorAdapter, it is easy to go from a position to an itemId
CODE:..........
Is there any way to do the reverse mapping? From an itemId, get its position in the list?
View 2 Replies
View Related
Mar 30, 2010
I've implemented a custom ListView and Adapter, and sometimes I receive IllegalStateException exception:" ERROR/AndroidRuntime(3575): java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread."
Here is some code example: Code...
View 5 Replies
View Related
Aug 10, 2010
I must be missing something simple here.I've searched around but don't think my search query is touching on the right topics to yield results. Anyhow, what I'm after is running through the array of data I bind to a ListView after a "Submit" button has been clicked.
View 3 Replies
View Related
Nov 21, 2010
I have a list view that can display items based on internal state (it has items, and 'viewed' items). i need to be able to toggle between the two states, i do that using a simple button that change the adapter's state and the adapter then called notifyDatasetChanged(). My data DOES gets updated, however i was facing two problems:
if in the previous mode the list was partially scrolled, it stayed in that state after i changed the data set (if i was half the way down i'll be half way down in the new data set as well, this is not the behavior i want, but i cols not find a way to scroll the list manually to position 0. any ideas?
(setSelected is not exactly a solution since i DON'T want any selection i want to stay in touch mode) In my list View each item has an image that is fetched from the net, as so it's being brought using my networking manager and i send the image request ONLY if i'm in this screen for the first time OR if scroll state is idlle, i didn't want to start loading images from the getView method since if i fling the screen it may load a lot of unnecessary images. However when calling notifyDatasetChanged() the scroll listener methods are not called. i solved this one by using notifyDatasetInvalidated even though my data is not empty, is there a better way to solve this issue ?
View 1 Replies
View Related
Nov 21, 2010
I have a list view that can display items based on internal state (it has items, and 'viewed' items). i need to be able to toggle between by two states, i do that using a simple button that change the adapter's state and the adapter then called notifyDatasetChanged(). My data DOES gets updated,
However i was facing two problems:
1. if in the previous mode the list was partially scrolled, it stayed in that state after i changed the data set (if i was half the way down i'll be half way down in the new data set as well, this is not the behavior i want, but i cols not find a way to scroll the list manually to position 0. any ideas ?
2. In my list View each item has an image that is fetched from the net, as so it's being brought using my networking manager and i send the image request ONLY if i'm in this screen for the first time OR if scroll state is idlle, i didn't want to start loading images from the getView method since if i fling the screen it may load a lot of unnecessary images. However when calling notifyDatasetChanged() the scroll listener methods are not called. i solved this one by using notifyDatasetInvalidated even though my data is not empty, is there a better way to solve this issue ?
View 2 Replies
View Related
Jun 3, 2010
Just watched Google IO's "World Of ListView" presentation [1]. Awesome stuff. I think every Android dev should watch it.
One gotcha for me was to use BaseAdapter.notifyDataSetChanged[2]. I checked code that I have written more than a year ago and found that I did try to use that, but commented it out with '// doesn't work' and I use requery() instead. That is of course much slower.
I now tried to find out why I wrote that it didn't work and hoped that I am meanwhile so much wiser that it would be easier to understand the proper use of the API. So much for ambition: The effect I see is that the list is not updated after I call notifyDataSetChanged(), but works with requery() and I am not so much wiser.
What could be the issue here? I use a ResourceCursorAdapter and only implemented the bindView() Method. This method is called when I call notifyDataSetChanged() on the RCAdapter. However the method is called with a cursor that contains the stale data.
Now there was a second gotcha from the presentation that I couldn't really place. It was said that the data should be committed on the GUI thread too (before calling notifyDataSetChanged()). I couldn't place it then, but I now suspect that this may be the issue here. So the rule would be to do the commit() on the Cursor on the UI thread? I do the updates to the database using a Service. This Service runs in the background, sometimes the app is in the foreground at the same time, but most often not. So I don't see how I should commit something in a UI thread? Is this the issue here? There are two different Cursors and I could only use notifyDataSetChanged when it would be the same cursor, otherwise requery() is correct?
Is that it? Any ideas? Is somebody going to write a book "The Android SDK - The missing manual"?
View 4 Replies
View Related
Sep 2, 2010
I am new to android, and ended up (have to) ask a question here. Let's make it simple, I simply want to make my own TextView-like (MyView extends View), This is my code:
public class MyView extends View { private Paint mPaint;
private String mText; private Bitmap mBitmap1; private Bitmap mBitmap2;
public MyView(Context context) { super(context); initView(); }
public MyView(Context context, AttributeSet attrs) { super(context, attrs);
initView(); } private final void initView() { mPaint = new Paint(); }
public void setText(String text) { mText = text; }
@Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int measuredWidth = measureWidth(widthMeasureSpec);
if (mBitmap1 == null) initBitmap1(measuredWidth);
int measuredHeight = measureHeight(heightMeasureSpec);
setMeasuredDimension(measuredWidth, measuredHeight);
}
private void initBitmap1(int measuredWidth) {
mBitmap1 = Bitmap.createBitmap(measuredWidth, Fonts.getHeight(), Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(mBitmap1 ); canvas.drawText(mText, 0, 0, mPaint);
} private void initBitmap2() {
mBitmap2 = Bitmap.createBitmap(30, Fonts.getHeight(), Bitmap.Config.ARGB_4444);
Canvas canvas = new Canvas(mBitmap2); canvas.drawText(mText, 0, 0, mPaint);
} private int measureWidth(int widthMeasureSpec) {
int measuredWidth = 0; int specWidthMode = MeasureSpec.getMode(widthMeasureSpec);
int specWidthSize = MeasureSpec.getSize(widthMeasureSpec);
if (specWidthMode == MeasureSpec.EXACTLY) { measuredWidth = specWidthSize;
} else { measuredWidth = getWidth(); if (specWidthMode == MeasureSpec.AT_MOST) {
measuredWidth = Math.min(measuredWidth, specWidthSize);
} } return measuredWidth; }
private int measureHeight(int heightMeasureSpec) {
int measuredHeight = 0; int specHeightMode = MeasureSpec.getMode(heightMeasureSpec);
int specHeightSize = MeasureSpec.getSize(heightMeasureSpec);
if (specHeightMode == MeasureSpec.EXACTLY) { measuredHeight = specHeightSize;
} else { measuredHeight = 80; if (specHeightMode == MeasureSpec.AT_MOST) {
measuredHeight = Math.min(measuredHeight, specHeightSize);
} } return measuredHeight;
} @Override protected void onDraw(Canvas canvas) {
super.onDraw(canvas); canvas.drawBitmap(mBitmap1, getLeft(), 0, mPaint);
initBitmap2(); canvas.drawBitmap(mBitmap2, getLeft(), 30, mPaint);
} }
In my code, I populate some numbers of MyView (let's say 20) in a ListActivity. My question is why mBitmap1's order changes randomly while i scroll (up-down) fastly (if I scroll slowly, this problem not occur)? mBitmap2 stays where those should be.
View 1 Replies
View Related
Jun 26, 2010
I would like to change text and back ground color of my Listview without building custom rows. Is this possible ?
View 1 Replies
View Related
Aug 30, 2012
i've been trying to get this to work... but it isnt working.
there was no Exception to catch, the app just crash.
Code:
public class MainActivity extends Activity{
...
private void loadFromFile_populateListView(final String data){
[code].....
View 7 Replies
View Related
Aug 29, 2010
Im using ListView to to show some custom data, once data is updated in the adapter i call notifyDatasetChanged(), so the view will get updated, all of this works well, my issue though is i would like to run an animation once only on items that got changed when the adapter was updated. currently i keep a copy of all the changed objects and i tried to animate the correct items through the getView() call.
However if i do it only once for every getView call then i see no animation most of the time on items that changed. if i continue to do so in successive getView calls i see animation on items that don not change as well and also the ones that changed get animated again and again.
Im guessing sometimes android calls the getView() for other reasons than showing the generated view immediately, and thats the reason it doesnt work if i do it once.
View 1 Replies
View Related
Jul 23, 2009
- 2 input boxes where the user can enter criteria to search for - 1 search button - when the search button is clicked, a search is performed and on the same page the matches are shown *below* the 2 input boxes and search button. - the results can be quite a few (say up to 50), which won't fit all on the viewable part of the screen, so the user has to be able to scroll down in the results. - when the user scrolls down over the results, the 2 input boxes + search button should of course also scroll up out of sight.
Basically the behaviour you get when you for example do a google search on google.com. But, for clarity: I don't want to use the WebView. Note that there should be no scrollbar for the results only (that can be done easily with a standard ListView), the all needs to scroll as a whole. The reason I want this behavior is that I don't want to direct the user to a next screen with the search results; that would be so annoying having to go back to the "search" screen all the time if you want to enter another search criteria, like if you figured out you made a typo.............................
View 5 Replies
View Related
Mar 26, 2010
I would like to catch horizontal scrolling in ListView. I don't wont to scroll ListView content, I need an event only. I use GestureDetector, and in onScroll() method I can figure out when user scrolls in horizontal direction. This part works. But my problem is ListView fires onItemLongClick event also. I need this event, but only if user doesn't scroll. If user scrolls in vertical direction, ListView doesn't fire onItemLongClick event. I need the same behavior for horizontal scrolling also.
View 2 Replies
View Related
Nov 5, 2009
I'm trying to scroll the ListView up/down actions by pressing a button, instead of using finger gesture. It looks like the super class AbsListView.onTouchEvent(MotionEvent ev) handles all the scrolling up/down motion and animation. So if I want to scroll the list by pressing a button, I don't really have a MotionEvent to pass onto onTouchEvent method for it to work. I tried ListView.scrollTo(x,y), it kind of works but the hidden part of the ListView is not rendered when shown on the screen. I am trying to re-draw the list by using: ListView.invalidate(), ListView.invalidateViews(), list.adapter.notifyDataSetChanged()
View 3 Replies
View Related
Oct 22, 2009
What I have now is a layout that includes a list view at the bottom. All of the items in the layout above the list view remain fixed as you scroll through the list view. I would like the entire page to scroll so for example when you reached the bottom of the list you would no longer see the items above the list view.
View 5 Replies
View Related
Jul 30, 2010
I have a listview displaying my data.Ok. I want to set the scroll position in a position of my choice, but I just cant do it. I used :
myListView.setSelection( anyPosition ); myListView.setSelected(true); and has not worked. I also tried : myListView.scrollTo(0, PositionY); and myListView.scroolBy(0, PositionY);
and there's a strange behavior, this two methods doesn't put the scrool in the "PositionY", it made the "PositionY" be the first position in the list, cutting everything that exist before.
View 3 Replies
View Related
Apr 24, 2009
Get scroll speed of Listview, Ivan Soto Fernandez Web Developer
View 4 Replies
View Related
Jun 10, 2010
I have a long listView that the user scrolls around and then returns to the previous menu. What I want is that when the user opens this list View again the list to be scrolled to where the it was previously left. Any ideas on how this can be achieved ?
View 2 Replies
View Related
Sep 29, 2010
I have 2 ListView in a layout. I want each ListView show all their items. And scroll the whole layout.
View 1 Replies
View Related
Jul 10, 2010
How can i get rid of the shadow when I scroll ListView.
I have shadows appearing on top and bottom of the list.
View 1 Replies
View Related
Jan 31, 2010
How do I set row height if text of some rows more than one line when writing custom ArrayAdapter?
View 4 Replies
View Related