[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();
            }
         });
    }
}



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

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

if row was previously selected
    change background color



많은 튜토리얼과 답변에 라디오 버튼을 통한 단일 선택에 대한 정보가 포함되어있어 (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));
    }
}



단순한 모든 것

보기 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);


        }



Links