Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Listview : How to remain highlighted/selected after press back button?

How to keep listview remain highlighted when we pressed back button? Is it possible? I've went through this link but no replies.

I managed to set background, image, and text in order to change when user press the list.

One of my xml:

<selector xmlns:android="http://schemas.android.com/apk/res/android">

 <item 
    android:state_pressed="true"
    android:drawable="@color/light_grey" />

<item android:state_selected="true"
    android:drawable="@color/light_grey"/>

<item android:state_activated="true"
    android:drawable="@color/light_grey"/>

<item android:state_focused="false"
    android:drawable="@color/white" />

notification_row.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:orientation="vertical" >

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="50dp"
    android:background="@drawable/activated_bg" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="30dp"
        android:layout_height="30dp"
        android:layout_gravity="center"
        android:layout_marginLeft="5dp"
        android:padding="4dp"
        android:src="@drawable/checkbox" />

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_weight="0.73"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/id_row"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone" />

        <TextView
            android:id="@+id/title_row"
            android:layout_width="match_parent"
            android:layout_height="25dp"
            android:layout_marginTop="5dp"
            android:layout_marginLeft="5dp"
            android:padding="2dp"
            android:text="Title"
            android:textColor="#000000"
            android:textSize="16sp"
            android:textStyle="bold" />

        <TextView
            android:id="@+id/content_row"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone" />

        <TextView
            android:id="@+id/sendtime_row"
            android:layout_width="match_parent"
            android:layout_height="25dp"                
            android:layout_marginLeft="5dp"
            android:maxLength="100"
            android:paddingBottom="2dp"
            android:paddingLeft="3dp"
            android:paddingRight="3dp"
            android:text="Date"
            android:textColor="#808080"
            android:textSize="15sp" />
    </LinearLayout>

</LinearLayout>

like image 367
nuah Avatar asked Nov 04 '22 00:11

nuah


2 Answers

in which Activity you have listview put this:

create this to global variable: Bundle savedInstanceState;

@Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        onCreate(savedInstanceState);
        super.onRestart();
    }

in onCreate handle your ListView or from where you set you adapter to ListView.

Here is simple Example How do this:

package com.example.testapp;

import com.example.main.util.testActivity;

import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MainActivity extends ListActivity {

    private static final String[] COUNTRIES = new String[] { "Belgium",
            "France", "France_", "Italy", "Germany", "Spain" };
    private MyArrayAdapter adapter;
    Bundle savedInstanceState;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        adapter = new MyArrayAdapter(MainActivity.this);
        getListView().setAdapter(adapter);
    }

    private class MyArrayAdapter extends BaseAdapter {

        private LayoutInflater mInflater;

        public MyArrayAdapter(Context con) {
            // TODO Auto-generated constructor stub
            mInflater = LayoutInflater.from(con);
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return COUNTRIES.length;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // TODO Auto-generated method stub
            final ListContent holder;
            View v = convertView;
            if (v == null) {
                v = mInflater.inflate(R.layout.my_spinner_style, null);
                holder = new ListContent();

                holder.name = (TextView) v.findViewById(R.id.textView1);

                v.setTag(holder);
            } else {

                holder = (ListContent) v.getTag();
            }

            holder.name.setText("" + COUNTRIES[position]);
            holder.name.setOnClickListener(mOnTitleClickListener3);

            return v;
        }

    }

    static class ListContent {

        TextView name;

    }

    public OnClickListener mOnTitleClickListener3 = new OnClickListener() {
        public void onClick(View v) {
            final int position = getListView().getPositionForView(
                    (View) v.getParent());
            v.setBackgroundColor(Color.RED);
            startActivity(new Intent(MainActivity.this, testActivity.class));
            // Log.d("you are click on Ratings", "you are click on Ratings");
            // v.setBackgroundColor(Color.WHITE);
        }
    };

    protected void onRestart() {
        // adapter.notifyDataSetChanged();
        onCreate(savedInstanceState);
    };
}

or you can also do same style REVERSE. mean you have to deselect that litview after go to next activity. you can do this in list item click or whatever you have used..

like image 141
Dhaval Parmar Avatar answered Nov 14 '22 22:11

Dhaval Parmar


You can just log the position every time in OnItemSelectedListener, and after user navigate back, call mListView.setSelection(pos)

like image 25
Robin Avatar answered Nov 14 '22 23:11

Robin