I've a Listview with add button when i click add new row of buttons
created dynamically. When i scroll listview these new buttons are
visible. How can i click add buttons then the buttons are immediately
visible. Why it is happened. There is any way to handle this issue.
I've try invalidateViews() invalidate() it doesn't work. Please help me to solve this .
My sample code here
a
dd_button.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
button = new Button(getApplicationContext());
linear.addView(button1, lparams);
listview.invalidateViews();
}
}
To refresh a Listview, create a ListAdapter and populate it with your items (buttons). Every time you put in it a new set of items, your list gets updated.
Check this reference on ListViews: http://developer.android.com/guide/topics/ui/layout/listview.html
you can use listview.notifyDatasetChanged() method to refresh your list.
I've solve my issue like this. Call this method
//Here running boolean value
//lv listview
private void scrollMyListViewToBottom() {
lv.post(new Runnable() {
public void run() {
if (!running) {
// Select the last row so it will scroll into view...
iv.setSelection(daily_dairy_2.getCount() - 1);
lv.invalidateViews();
running = true;
}
}
});
}
Related
i am using android studio in listview i have added adapter. when user click delete button from listview item then i want to refresh activity.
adapter delete button definition
deletebtn =convertView.findViewById(R.id.delete_btn);
deletebtn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
databaseAccess.deleteFavorite(favoriteModel.getWid());
}
});
i have tried this code but not working
deletebtn =convertView.findViewById(R.id.delete_btn);
deletebtn.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
databaseAccess.deleteFavorite(favoriteModel.getWid());
Intent intent1=new Intent(context,FavoriteNameslist.class);
context.startActivity(intent1);
((Activity)context).finish();
}
});
i am new to Android - please help
i want when user click on delete button then refresh activity
There is no need to call your Activity to referesh listview you can use
notifyDataSetChanged()
remove the item and set notifyDataSetChanged()
yourList.remove([INDEX]);
arrayAdapter.notifyDataSetChanged();
If you are removing a single item from the view, you need to call
yourAdapter.notifyItemChanged(position) //Just pass the position to this. This also has a default animation. Try this in your adapter class instead of refreshing the layout.
Try below lines of code on Deleting Row to Update adapter
arrayList.remove(position);
mAdapter.notifyItemRemoved(position);
I am using listviews instead of button in my application. I want to set OnClickListener() on listview instead of setOnItemClickListener().
here is my code:
listview.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View view) {
startActivity(new Intent(getApplicationContext(), BillingActivity1.class));
}
});
can someone suggest a method to do OnClickListener()?
thank you
Ok, I understood your problem.
Lets analyze cases:
Listview with items
If your ListView has some items, the good approach is to set anyway an onItemClickListener and, based on which item has been clicked, do something. You can also do the same thing for each item without considering which item has been pressed, but this is still the best approach.
ListView with no items
From Docs:
the list view will be hidden when there is no data to display.
ListView (usually) has the height set to wrap_content, so even setting the onClickListener on an empty list won't work since the list will result having height of 0, being not able to be clicked (you can't click a view with no height since it is not visible).
Perform actions on an empty ListView
If, as it looks like, you need to do some stuffs on your ListView even if it's empty, just add a Button or a FloatingActionButton to your Activity and then use those: you can both keep the button in any case (like an "Add item" Button) or you can make it visible only if the ListView is empty. something like:
xml
<Button
android:id="#+id/buttonEmptyListStuffs"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="List is empty, click me!"
android:visibility="gone"/>
activity
//init the button and do other stuffs
...
buttonEmptyListStuffs.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
//go to activity 2
}
});
...
List<MyListViewItem> myListViewItems = //init your list of items for the listView
buttonEmptyListStuffs.setVisibility(myListViewItems.size() > 0 ? View.GONE : View.VISIBLE);
...
Note: I wrote this code by hand without compiler so it might not be perfect, just take the concept behind it
As Pskink said from comments
I forgot to mention that ListView has setEmptyView(View) which allows you to set a custom layout for the Listview if it is empty. Refer to his link for a good tutorial
USe this:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
#Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
startActivity(new Intent(getApplicationContext(), BillingActivity1.class));
}
});
If you really want to handle click on any Point of your listView. You can put the list inside a FrameLayout or LinearLayout and then add your onClickListener on the layout.
findViewById(R.id.my_parent_list_layout).setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
// DO your stuff
}
});
If your list item count is empty the dynamaically change the visibility of the list view with a button(switching the visibility with list view and button) and give the click action to the button.
I have a list of items in Listview.
In each row, I have Text and image. Currently, the click effect is there for the entire row. I want to add a specific click effect to text view and image.
How to do that?
I guess you have a custom adapter for your listview... so if you override the getView method, there you can set the onclick listener for each of your views.
image.setOnClickListener(new OnClickListener()
{
#Override
public void onClick()
{
// Do something
}
});
and
text.setOnClickListener(new OnClickListener()
{
#Override
public void onClick()
{
// Do something
}
});
Now, Doyou want the same listener defined in onItemClickListener in each of your views? easy: you can define your performance in another method, and only call it where you want.
I hope this help
I found a similar question about scrolling listview and button click but it did not help me. My issue is:
I have a listview with custom rows. I have two different states of listview; the switch between the states is a button at the bottom of the screen. The second state has delete buttons in every row. When I click on delete button in a specific row, that row is removed from database and listview is updated. Everything works great except I need to click the delete button twice in order for it to work. Below is my code for handling the clicks. flag==1 is the second state of the listview.
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
View main = parent.getChildAt(position);
TextView delete = (TextView)main.findViewById(R.id.delete_button);
if(flag==0){
switchToItemsView(id);
}
if(flag==1){
delete.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
mDbHelper.deleteList(id);
updateListView();
}});
}
}
I tried to set parent view's focusableInTouchMode attribute to false as suggested in another post but it did not help.
If you can help me solve this I will be grateful,
Thank you in advance.
Probably you have focus. Remove it.
android:focusableInTouchMode="true"
android:focusable="true"
You need to declare the onClickListener before the actual flag check; in your case the view changes and with that the flag, and the listener is set. The next click actually triggers the listener.
Not related, but you should change your second if to an elseif since there is no way it would be called if the first one is called.
After spending hours I figured out how to do it:
I moved my click listener from my main activity class to my custom ListAdapter class and modified it a little like below;
deleteButton.setOnClickListener(new View.OnClickListener() {
#Override
public void onClick(View v) {
int rowid = Integer.parseInt(rowIds.get(position));
mDb.deleteList(rowid);
lists.remove(position);
notifyDataSetChanged();
}
});
Now it works great. When I click delete button it removes the list both from the ArrayList (the one used in ListAdapter) and from database.
I am using Listview, i want to scroll down to list's 10 item when view get loaded, how can do that ????
Try yourListView.setSelection(position)
Try this:
mMessageList.addAll(result);
mMessageArrayAdapter.notifyDataSetChanged();
mMessageListView.clearFocus();
mMessageListView.post(new Runnable() {
#Override
public void run() {
mMessageListView.setSelection(searchedMessagePosition);
}
});