Search code examples
androidandroid-studiolistviewandroid-activityrefresh

Refresh activity in List-View in Tab (Android)


I have a listview in a Tab in a Tab Activity. Lets say that the Activity's name is "Main". I want it so when I press on an item in the listview (which is in a tab, which is in an activity), it refreshes "Main" (The Overall Activity).


Solution

  • Use onItemClickListener() for your listview as shown below.

    In following example, MainActivity will restart when "Item 1" is clicked.

    ListView listView=findViewById(R.id.list_view);
    List<String> mList= Arrays.asList("Item 1","Item 2","Item 3");
    listView.setAdapter(new ListViewAdapter(this,R.layout.list_item_layout,mList));
    
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                    //Restart activity when Item 1 gets clicked
                    if("Item 1".equals(parent.getAdapter().getItem(position).toString())){
                        startActivity(new Intent(MainActivity.this,MainActivity.class));
                        finish();
                    }
                }
            });

    Example: ListViewAdapter.class

    public class ListViewAdapter extends ArrayAdapter<String> {
        private List<String>  mList;
    
        public ListViewAdapter(@NonNull Context context, int resource, @NonNull List<String> list) {
            super(context, resource, list);
            this.mList = list;
        }
    
        @NonNull
        @Override
        public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
            if (convertView == null) {
                convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_layout,parent,false);
            }
    
            ((TextView) convertView.findViewById(R.id.tv_item)).setText(getItem(position));
            return convertView;
        }
    
        @Nullable
        @Override
        public String getItem(int position) {
            return mList.get(position);
        }
    }

    Considering you are using a FragmentPagerAdapter in your tabbed activity, you can put the code for the ListView in onCreateView() of the corresponding fragment instance,

       @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                View rootView = inflater.inflate(R.layout.fragment_main, container, false);
                ListView listView=rootView.findViewById(R.id.list_view);
                List<String> mList= Arrays.asList("Item 1","Item 2","Item 3");
                listView.setAdapter(new ListViewAdapter(rootView.getContext(),R.layout.list_item_layout,mList));
                listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        //Restart activity when Item 1 gets clicked
                        if("Item 1".equals(parent.getAdapter().getItem(position).toString())){
                            if(getActivity()!=null){
                                startActivity(new Intent(getActivity(),MainActivity.class));
                                getActivity().finish();
                            }
                        }
                    }
                });
                return rootView;
            }
        }