Измените текст TextView на Обычный после того, как объект был нажат

В настоящее время у меня есть ListView, который использует CustomAdapter для отображения информации из моей базы данных Firebase. Который выглядит следующим образом:

Посмотреть список

После создания я хочу, чтобы текст в зеленых полях (элементы ListView) был жирным. Как только пользователь нажимает на этот элемент ListView, я хочу, чтобы текст превратился в Normal, без печати.

Я хочу, чтобы это работало подобно электронной почте. Когда вы получаете новое электронное письмо, его заголовок выделяется жирным шрифтом, и после того, как это электронное письмо открыто и вы возвращаетесь в папку "Входящие", текст отображается как "Обычный".

Ниже приведен весь мой соответствующий код:

MyJobsFragment, SelectItem

// Press the object and display the information and sign the job of with signature pad

    jobListViewMyAcJobs.setOnItemClickListener(new AdapterView.OnItemClickListener()
    {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            ActiveJobDetailsFragment activeJobDetailsFragment = new ActiveJobDetailsFragment();
            Bundle bundle = new Bundle();
            bundle.putSerializable("Job", adapterActiveJobs.mData.get(position));
            bundle.putSerializable("JobId", adapterActiveJobs.mDataKeys.get(position));
            activeJobDetailsFragment.setArguments(bundle);
            getFragmentManager().beginTransaction().replace(R.id.content, activeJobDetailsFragment).addToBackStack(host.getCurrentTabTag()).commit();
        }
    });

MyCustomAdapter

public class MyCustomAdapter extends BaseAdapter
    {
        private ArrayList<JobInformation> mData = new ArrayList<>();
        private ArrayList<JobInformation> mDataOrig = new ArrayList<>();
        private ArrayList<String> mDataKeys = new ArrayList<>();

        private LayoutInflater mInflater;

        ... Removed Code ...

        @Override
        public View getView(final int position, View convertView, ViewGroup parent)
        {
            // Bid on holder
            MyJobsFragment.MyCustomAdapter.GroupViewHolderBidOn holderBidOn;
            // Accepted holder
            final MyJobsFragment.MyCustomAdapter.GroupViewHolderAccepted holderAccepted;
            // Completed holder
            MyJobsFragment.MyCustomAdapter.GroupViewHolderCompleted holderCompleted;

            if (convertView == null)
            {
                // Bid on
                if (host.getCurrentTab() == 0)
                {
                    convertView = mInflater.inflate(R.layout.job_info_bid_on, null);
                    holderBidOn = new MyJobsFragment.MyCustomAdapter.GroupViewHolderBidOn();

                    holderBidOn.textViewJobName = convertView.findViewById(R.id.textName);
                    holderBidOn.textViewJobDescription = convertView.findViewById(R.id.textDesc);

                    holderBidOn.textViewJobName.setText(mData.get(position).getAdvertName());
                    holderBidOn.textViewJobDescription.setText(mData.get(position).getAdvertDescription());

                    convertView.setTag(holderBidOn);
                }
                // Accepted
                else if (host.getCurrentTab() == 1)
                {
                    convertView = mInflater.inflate(R.layout.job_info_accepted, null);
                    holderAccepted = new MyJobsFragment.MyCustomAdapter.GroupViewHolderAccepted();

                    holderAccepted.textViewJobName = convertView.findViewById(R.id.textName);
                    holderAccepted.textViewDescription = convertView.findViewById(R.id.textDesc);

                    holderAccepted.textViewJobName.setText(mData.get(position).getAdvertName());
                    if(text != null)
                    {
                        text.setTypeface(null, Typeface.BOLD);
                    }

                    holderAccepted.textViewDescription.setText(mData.get(position).getAdvertDescription());
                    // TODO - Was going to add the the users bid into this here, however it's difficult as the bid isnt stored in the jobs table
                    // TODO - I tried to add it in, looped through the bids table and found the bids with the mDataKeys. But it always displayed the last value.

                    convertView.setTag(holderAccepted);
                }
                // Completed
                else if (host.getCurrentTab() == 2)
                {
                    convertView = mInflater.inflate(R.layout.job_info_list_completed, null);

                    holderCompleted = new MyJobsFragment.MyCustomAdapter.GroupViewHolderCompleted();

                    holderCompleted.textViewJobName = convertView.findViewById(R.id.textName);
                    holderCompleted.textViewJobName.setText(mData.get(position).getAdvertName());

                    convertView.setTag(holderCompleted);
                }
            } else
            {
                if (host.getCurrentTab() == 0)
                {
                    holderBidOn = (MyJobsFragment.MyCustomAdapter.GroupViewHolderBidOn) convertView.getTag();
                } else if (host.getCurrentTab() == 1)
                {
                    holderAccepted = (MyJobsFragment.MyCustomAdapter.GroupViewHolderAccepted) convertView.getTag();
                } else if (host.getCurrentTab() == 2)
                {
                    holderCompleted = (MyJobsFragment.MyCustomAdapter.GroupViewHolderCompleted) convertView.getTag();
                }
            }

            return convertView;
        }

        public class GroupViewHolderBidOn
        {
            public TextView textViewJobName;
            public TextView textViewJobDescription;
        }

        public class GroupViewHolderAccepted
        {
            public TextView textViewJobName;
            public TextView textViewDescription;
        }

        public class GroupViewHolderCompleted
        {
            public TextView textViewJobName;
        }
}

1 ответ

Ну, есть несколько способов достижения этого. Я бы предложил вам добавить поле в вашем JobInformation класс, что-то вроде

public class JobInformation{
    .
    .
    .
    .
    . // other fields

    private boolean isSelected;

    public boolean isSelected() {
        return isSelected;
    }
    public void setSelected(boolean selected) {
        isSelected = selected;
    }

    .
    .
    . // Other getters/setters

}

Теперь вам нужно установить это поле, когда вы нажимаете onItemClick функция сделать это

public void onItemClick(AdapterView<?> parent, View view, int position, long id)
        {
            ActiveJobDetailsFragment activeJobDetailsFragment = new ActiveJobDetailsFragment();
            Bundle bundle = new Bundle();
            adapterActiveJobs.mData.get(position).setSelected(true); // add this line in your code
            bundle.putSerializable("Job", adapterActiveJobs.mData.get(position));
            bundle.putSerializable("JobId", adapterActiveJobs.mDataKeys.get(position));
            activeJobDetailsFragment.setArguments(bundle);
            getFragmentManager().beginTransaction().replace(R.id.content, activeJobDetailsFragment).addToBackStack(host.getCurrentTabTag()).commit();
        }

наконец в вашем getView метод в вашем адаптере, проверьте isSelected поле и стиль вашего textview соответственно, добавьте это в свой getView метод.

if(mData.get(position).isSelected()){
    // set your textview typeface to normal
}
else{
    // set your texview typeface to bold.
}

и вам нужно будет позвонить adapter.notifyDataSetChanged() всякий раз, когда вы обновляете selected переменная, так что ваш getView называется.

Другие вопросы по тегам