Как сохранить выбранный и выделенный индекс listView?

В моем приложении я реализовал ListView. Теперь я хочу, чтобы он был установлен следующим образом: если я выбираю по конкретному индексу, он должен оставаться выбранным. и отображаются как выбранные на ListView. Если я выберу другой индекс, то теперь этот новый индекс должен оставаться выбранным.

Отредактировано

Означает, что я хочу установить, что выбранный индекс должен оставаться выделенным, пока я не выберу другой. но не как несколько выбранных.

Итак, как это сделать?

Пожалуйста, помогите мне в этом. Я реализовал код ListView, как показано ниже:

phonemesListView = (ListView) findViewById(R.id.phonemsListView);
private String[] Phonemes_List = new String[]{"P","B","T","D","K","G","N","M","ING","TH v","TH vl","F","V","S","Z","SH","CH","J","L","R rf","R b"};

phonemesListView.setAdapter(new ArrayAdapter<String>(this,R.layout.phonemes_list_row, R.id.phonemes,Phonemes_List));
    @Override
    public void onItemClick(AdapterView<?> parent, View view,final int Position,long id) {
        phonemsText.setText(Phonemes_List[Position]);
        Toast.makeText(getApplicationContext(), "Phonems: "+Phonemes_List[Position], Toast.LENGTH_SHORT).show();
//      view.setBackgroundColor(Color.RED);
//      phonemesListView.setBackgroundColor(Color.BLUE);
        jumposition = Position;             
        int temp = 0;              
        if(jumpCount == -1){                 
            view.setBackgroundColor(Color.BLUE);                  
            jumpCount = jumposition;                 
            JumpView = view;                  
            temp = 1;             
        }              
        if(temp == 0) {                 
            if(jumpCount == jumposition) {                     
                view.setBackgroundColor(Color.BLUE);                     
                JumpView = view;                 
            }                 
            else{                     
                JumpView.setBackgroundColor(Color.TRANSPARENT);                     
                view.setBackgroundColor(Color.BLUE);                      
                jumpCount = jumposition;                     
                JumpView = view;                 
            }             
        }
    }

Спасибо.


person Shreyash Mahajan    schedule 17.01.2012    source источник
comment
этот пост может дать вам некоторое представление stackoverflow.com/questions/3825645/ и попробуйте listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); :)   -  person Sergey Benner    schedule 17.01.2012
comment
@SergeyBenner: см. обновленный вопрос.   -  person Shreyash Mahajan    schedule 17.01.2012


Ответы (4)


Вы можете просто сохранить выбранную позицию из держателя данных, который вы используете для заполнения вашего ListView. Затем вы можете использовать атрибут setSelection(position) ListView, чтобы установить выбранную позицию. выбирается всякий раз, когда вы хотите.

person Lalit Poptani    schedule 17.01.2012
comment
Спасибо лалит. но я хочу, чтобы индекс выбранного списка оставался выделенным. - person Shreyash Mahajan; 17.01.2012
comment
вам, вероятно, нужно реализовать OnScrollListener и установить там свой элемент, но есть примечание к тому, что «просмотр списка Android перерабатывает элементы в списке, когда они не видны на экране». Так что все, что невидимо, будет нулевым». и информацию об этом stackoverflow.com/questions/4156217/ - person Sergey Benner; 17.01.2012

    First Create the List view by using the Base adapter : As Follows Create two layout files and One java file : 

    main.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:background="#FFFFFF">
        <ListView
            android:id="@+id/listviewText"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:cacheColorHint="#FFFFFF"></ListView>
    </LinearLayout>

    textview.xml
    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout
        xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <TextView
            android:id="@+id/textview"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:textSize="15dip"
                android:focusable="false"          
></TextView>

    </LinearLayout>

    Activity code is 

    package com.pac.marico;


import java.util.ArrayList;



import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.ListView;
import android.widget.TextView;

public class ListViewColor extends Activity {
    /** Called when the activity is first created. */
    ArrayList<String> arrayList;
    Listviewlistneer listviewlistneer;
    ListView listView;

    int jumposition;
    int jumpCount = -1;
    View JumpView = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        listView = (ListView)findViewById(R.id.listviewText);
        arrayList = new ArrayList<String>();

        arrayList.add("ABC");
        arrayList.add("XYZ");
        arrayList.add("PQR");
        arrayList.add("ABC");
        arrayList.add("XYZ");
        arrayList.add("PQR");
        arrayList.add("ABC");
        arrayList.add("XYZ");
        arrayList.add("PQR");
        arrayList.add("ABC");
        arrayList.add("XYZ");
        arrayList.add("PQR");
        arrayList.add("ABC");
        arrayList.add("XYZ");
        arrayList.add("PQR");
        arrayList.add("ABC");
        arrayList.add("XYZ");
        arrayList.add("PQR");
        arrayList.add("ABC");
        arrayList.add("XYZ");
        arrayList.add("PQR");
        arrayList.add("ABC");
        arrayList.add("XYZ");
        arrayList.add("PQR");

        ListviewAdapter listviewAdapter = new ListviewAdapter();
        listView.setAdapter(listviewAdapter);

        listviewlistneer = new Listviewlistneer();

    }

    class ListviewAdapter extends BaseAdapter
    {

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

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

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

        @Override
        public View getView(int position, View view, ViewGroup parent) {

            View rowView = view;
            Viewholder viewholder = null;


            if(rowView == null)
            {
                LayoutInflater layoutInflater = LayoutInflater.from(ListViewColor.this);
                rowView = layoutInflater.inflate(R.layout.textview, null);

                viewholder = new Viewholder();
                viewholder.textView = (TextView)rowView.findViewById(R.id.textview);

                rowView.setTag(viewholder);
            }
            else
            {
                viewholder = (Viewholder)rowView.getTag();
            }

            viewholder.textView.setTag(position);
            viewholder.textView.setText(arrayList.get(position));


            if(jumpCount == position)
            {
                JumpView = rowView;
                            rowView.setBackgroundColor(Color.RED);
                    }
            else
            {
                rowView.setBackgroundColor(Color.TRANSPARENT);
                    }

            listView.setOnItemClickListener(listviewlistneer);
            return rowView;
        }
    }

    class Listviewlistneer implements OnItemClickListener
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position,long id) {

            jumposition = position;
            int temp = 0;

            if(jumpCount == -1)
            {
                view.setBackgroundColor(Color.RED);

                jumpCount = jumposition;
                JumpView = view;

                temp = 1;
            }

            if(temp == 0)
            {
                if(jumpCount == jumposition)
                {
                    view.setBackgroundColor(Color.RED);
                    JumpView = view;
                }
                else
                {
                    JumpView.setBackgroundColor(Color.TRANSPARENT);
                    view.setBackgroundColor(Color.RED);

                    jumpCount = jumposition;
                    JumpView = view;
                }
            }
        }

    }

    class Viewholder
    {
        TextView textView;
    }
}

Просто попробуйте прямо сейчас.

person mayur rahatekar    schedule 18.01.2012
comment
Да, это то, что я хочу, но все же есть некоторые проблемы. Пока я просматриваю список, появляется кровать. и пока я выбираю другой, я могу выбрать другой индекс. теперь есть два индекса, как выбрано. Я не хочу такого. - person Shreyash Mahajan; 19.01.2012
comment
Если вы устанавливаете цвет для клика onItem, то почему это невозможно для моего кода? Пожалуйста, обратитесь к нему и дайте мне знать. - person Shreyash Mahajan; 19.01.2012
comment
@iDroid: Пожалуйста, прокомментируйте свой ответ. И см. обновленный вопрос. Я сделал так, но все еще не смог получить надлежащий результат. С вашим ответом я получил результат, как сейчас с моим кодом. поэтому, пожалуйста, помогите мне в этом. - person Shreyash Mahajan; 19.01.2012
comment
@iDroidExplorer Можете ли вы просто скопировать мою программу и запустить ее. и проверьте, работает ли он. И удовлетворить ваши требования. затем отредактируйте программу. arraylist просто нужно изменить. - person mayur rahatekar; 19.01.2012
comment
да, вы правы, но при этом я не получаю должного результата, как хочу. Так в чем проблема с этим? - person Shreyash Mahajan; 20.01.2012
comment
Ваш код, который я установил в своем коде, работает нормально, но пока я просматриваю список, выделенный индекс изменяется. я имею в виду, что я получил выделенный цвет на другом индексе. - person Shreyash Mahajan; 21.01.2012

У вас может быть список выбранных фонем, который обновляется onItemClick в OnItemClickListener из ListView, и они вызывают adapter.notifyDataSetChanged(), чтобы список снова перерисовывался.

В методе getView адаптера можно изменить фон элемента, если фонема есть в списке выбранных фонем.

С Уважением.

person sgallego    schedule 17.01.2012
comment
@iDroidExplorer Вы проверяете эмулятор или внутри мобильного телефона. Я проверил приведенный выше код с обеих сторон, ошибок не обнаружено... Можете ли вы сказать мне, в чем именно проблема. - person mayur rahatekar; 19.01.2012

после нескольких дней поисков и дергания за волосы я только что узнал, что activatedBackgroundIndicator также доступен в системе укладки ActionBarSherlock. Большинство разработчиков, которым необходимо разрабатывать в ICS и поддерживать обратную совместимость, используют ActionBarSherlock, поэтому использование ActionBarSherlock является хорошим вариантом для большинства случаев. Поэтому вместо использования android:background="?activatedBackgroundIndicator", которое выдает ошибки в версиях Android до 11, просто используйте: android:background="?activatedBackgroundIndicator"

вот пример xml-кода:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
   //note the activatedBackgroundIndicator
android:background="?activatedBackgroundIndicator"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingBottom="2dip"
android:paddingTop="2dip" >

<TextView
    android:id="@+id/text1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:paddingLeft="6dip"
    android:paddingRight="6dip"
    android:textSize="15sp" />

<TextView
    android:id="@+id/text2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:gravity="center_vertical"
    android:minHeight="?android:attr/listPreferredItemHeight"
    android:paddingRight="5dip"
    android:textSize="20dip" />
  </LinearLayout>
person Mehdi Fanai    schedule 15.03.2013