Как сохранить выделенный и выделенный индекс listView? - PullRequest
0 голосов
/ 17 января 2012

В моем приложении я реализовал ListView.Теперь я хочу, чтобы он был настроен так: если я выбираю индекс по перикулярной линии, он должен оставаться неизменным.ANS отображаются как выбранные на 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;                 
            }             
        }
    }

Спасибо.

Ответы [ 4 ]

2 голосов
/ 17 января 2012

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

1 голос
/ 18 января 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;
    }
}

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

0 голосов
/ 16 марта 2013

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

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

<?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>
0 голосов
/ 17 января 2012

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

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

Привет.

...