如何取消选择ListFragment中的行

时间:2014-02-12 10:20:52

标签: android android-listfragment

我有以下代码显示ListFragment。选择一行后,我将行的背景变为红色。如果我单击另一行,则会变为红色,但第一个选定的行仍为红色。

如何为取消选择的行重新调整颜色?我尝试过一些事情,例如clearCoices(),list.invalidate(),list.requestLayout(),list.refreshDrawableState。他们似乎都没有工作。

提前谢谢,马特

public  class CarerDetailsFragment extends ListFragment{

    private static final String TAG = CarerDetailsFragment.class.getSimpleName();
     MySimpleArrayAdapter myAdapter;
     TwoDimensionalArrayList rotaArray;


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

        Bundle b = getArguments();

        if(b != null){

        rotaArray = (TwoDimensionalArrayList) b.get("rotaArray");

        Log.e(TAG, "rotaArray in CarerDetailsFragment has size " + rotaArray.size());

        }else{

            Log.e(TAG, "Bundle b = null!!!!!!!!!!!");

        }

    }








    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        // Inflate the layout for this fragment
        return inflater.inflate(R.layout.carerdetailsfragmentlayout, container, false);
    }








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

        myAdapter = (MySimpleArrayAdapter) new MySimpleArrayAdapter(getActivity(), rotaArray);

        setListAdapter(myAdapter);


    }








    @Override
    public void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
        Log.e(TAG, "onListItemClick");

        l.clearChoices();






        v.setBackgroundColor(Color.parseColor("#FF0000"));


        String name;
        String actTimeIn;
        String actTimeOut;
        String doubleUpValue;
        String status;
        String startTime;
        String clientID;
        String notes;




        Bundle b = new Bundle();
        b.putString("name", name);
        b.putString("actTimeIn", actTimeIn);

        Fragment newFragment = new CarerPurposeOfCallFragment();
        newFragment.setArguments(b);

        FragmentTransaction transaction = getFragmentManager().beginTransaction();

        // Replace whatever is in the fragment_container view with this fragment,
        // and add the transaction to the back stack
        transaction.replace(R.id.carerpurposeofcall, newFragment);
        //transaction.addToBackStack(null);

        // Commit the transaction
        transaction.commit();




    }








    private class MySimpleArrayAdapter extends ArrayAdapter<String> {
        private final Context context;
        private final ArrayList<?> list;

        String justTime;
        String statusField;
        String callID;
        String needName;

        public MySimpleArrayAdapter(Context context, ArrayList<?> list) {

            super(context, R.layout.rotarowlayout);
            Log.e(TAG, "inside adapter constructor");
            this.context = context;
            this.list = list;

            //Log.e(TAG, "list has size of " + this.list.size());


        }

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


            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

            View rowView = inflater.inflate(R.layout.rotarowlayout, parent, false);




            TextView startTime = (TextView) rowView.findViewById(R.id.rowstarttime);
            TextView duration = (TextView) rowView.findViewById(R.id.rowduration);
            TextView status = (TextView) rowView.findViewById(R.id.rowstatus);
            TextView name = (TextView) rowView.findViewById(R.id.rowclientname);
            final ImageView noteStatus = (ImageView)rowView.findViewById(R.id.notestatus);




            return rowView;




        }

        @Override
        public int getCount() {

            if(this.list != null){

            return this.list.size();
            }else{
                return 0;
            }


        }



    }// end of adapter class








}//end of CarerListFragment

1 个答案:

答案 0 :(得分:0)

使用myAdapter.toggleSelection(position);选择或取消选择。 您可能需要selectedList并在切换时进行检查。