[android] 안드로이드에서 ListView 행을 강조 표시하는 방법?


Answers

다만:

  1. 목록보기에서 올바른 선택 모드를 설정하십시오. setChoiceMode
  2. 다음과 같이 항목 레이아웃에서 선택 상태를 지원하는 배경을 설정합니다.

    android:background="?android:attr/activatedBackgroundIndicator"
    

참고 :

Question

선택한 ListView 에서 사용자가 선택한 것을 표시하기 위해 행을 강조 표시해야합니다. 그래서 선택한 행이 아니며 이전에 선택한 것입니다.

나는 이미 위치를 다음과 같이 가지고있다.

ListView.setSelection(position);

그리고 지금 내가 원하는 것은이 특정 행을 선택하고 그것을 강조하는 것입니다.

ListView 가 포함 된 활동의 onCreate() 코드는 다음과 같습니다.

public class CountryView extends Activity
{
    protected static final String LOG_TAG = null;
    /** Called when the activity is first created. */
    String[] lv_arr = {};

    ListAdapter adapter;
    TextView t;
    private ListView lvUsers;
    private ArrayList<Coun> mListUsers;
    String responce=null;
    public int d;
    int selectedListItem = -1;


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

        Intent data =getIntent();

        mListUsers = getCoun();
        lvUsers = (ListView) findViewById(R.id.counlistView);


        lvUsers.setAdapter(new ListAdapter(this, R.id.counlistView, mListUsers)); 


        selectedListItem=data.getExtras().getInt("PositionInList");

       lvUsers.setChoiceMode(ListView.CHOICE_MODE_SINGLE);



        lvUsers.setOnItemClickListener(new OnItemClickListener()
        {

            int positionItem;

            public void onItemClick(AdapterView<?> parent, View view,int position, long id)
            {
                Intent pongIntent = new Intent(getApplicationContext(),Trav.class);

                int counId=mListUsers.get(position).id;

                pongIntent.putExtra("response",mListUsers.get(position).p);
                pongIntent.putExtra("responseCounID",counId);

                //Put the position of the choose list inside extra
                positionItem=position;
                pongIntent.putExtra("PositionInListSet",positionItem);

                setResult(Activity.RESULT_OK,pongIntent);

                Log.i("CounID *******************************"," "+counId);
                finish();
            }
         });
    }
}



단순한 모든 것

보기 updatedview = null;

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


           //these two lines of code means that only one item can be selected at a time
            if(updatedview != null) updatedview.setBackgroundColor(Color.TRANSPARENT);
            updatedview=view;


            Toast.makeText(getApplicationContext(), " " + str[position], Toast.LENGTH_LONG).show();



            view.setBackgroundColor(Color.CYAN);


        }



많은 튜토리얼과 답변에 라디오 버튼을 통한 단일 선택에 대한 정보가 포함되어있어 (RadioGroup에 크게 의존했기 때문에)이 문제를 쉽게 해결할 수있는 문제가있었습니다.

내 문제는 내가 "하이라이트"상태로 항목을 설정할 수 있지만 다음 항목을 선택하면 목록을 다시 설정할 수 없다는 것이 었습니다. 다음은 내가 생각해 낸 것입니다.

listView.setOnItemClickListener(new ItemHighlighterListener ());

이 수업에서 :

private class ItemHighlighterListener implements OnItemClickListener{

    private View lastSelectedView = null;

    public void clearSelection()
    {
        if(lastSelectedView != null) lastSelectedView.setBackgroundColor(android.R.color.transparent);
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View view, int arg2, long arg3) {
        clearSelection();
        lastSelectedView = view;
        view.setBackgroundDrawable(view.getContext().getResources().getDrawable(R.drawable.shape_selected_menu_item));
    }
}



왜 배열에 선택 항목을 저장하지 myArrayAdapter(context,layoutID,dataArray,selectionArray) 와 같은 ListView Array Adapter의 생성자에 배열을 전달합니다.

그런 다음 arrayadapter에 대한 getView 메소드에서 체크 만하면된다. 예를 들어 가상 코드

if row was previously selected
    change background color



Related