Невозможно изменить значение размера текста в ListView в другом классе фрагмента.

Я хочу изменить размер текста в ListView в другом классе фрагмента. Я объявил переменную в другом классе как

public static TextView title;

затем я изменяю значение этого текстового формата, используя фрагмент класса.

title.setTextSize(30);

когда я возвращаюсь к другой активности, она не работает.

Вот мой код:

public class Setting extends AppCompatActivity {

    private RadioGroup Text_Size;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_setting);

        Text_Size = (RadioGroup) findViewById(R.id.radiogroup);
        Text_Size.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(RadioGroup group, int checkedId) {

                switch (checkedId) {
                    case R.id.small:
                        HotNewsFrag.title.setTextSize(15);
                        break;
                    case R.id.medium:
                        HotNewsFrag.title.setTextSize(20);
                        break;
                    case R.id.big:
                        HotNewsFrag.title.setTextSize(30);
                        break;
                    default:
                        break;
                }
            }
        });

        LinearLayout back = (LinearLayout) findViewById(R.id.back1);
        back.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent setting = new Intent(Setting.this, MainActivity.class);
                startActivity(setting);
            }
        });
    }
}

Вот мой фрагмент:

public class HotNewsFrag extends Fragment {

    private View view;
    private ListView listOfNews;
    ListViewAdapter adapter;
    ArrayList<HotNews> arraylist1;
    public static String newsid;
    public static TextView title;
}

2 ответа

Если вы просто хотите, чтобы текст выделился, попробуйте использовать SetTypeFace.BOLD

То, как вы справляетесь с этим, совершенно неверно.

БОЛЬШАЯ ПРОБЛЕМА: определение текста View как Static вызовет утечку памяти и предотвратит сборку вашего вида и активности.

Вот два подхода:

ПЕРВЫЙ: ОБЩИЕ ПРЕДПОЧТЕНИЯ И ОБНОВЛЕНИЕ

Вы можете сохранить размер текста в sharedPreference и в своей деятельности или фрагментах, переопределить onResume и снова установить размер текста для нашего текстового представления на значение в sharedPreference, которое вы сохранили ранее

ВТОРОЙ: ВЕЩАТЕЛЬНЫЕ ПРИЕМНИКИ

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

Text_Size.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(RadioGroup group, int checkedId) {
            int txtSize=0;
            switch (checkedId)
            {
                case R.id.small:
                    txtSize=15;
                    break;
                case R.id.medium:
                    txtSize=20;
                    break;
                case R.id.big:
                    txtSize=30;
                    break;
                default:
                    break;
            }
                Setting.this.getSharedPreferences("MY_SHARED",0).edit().putInt("FONT_SIZE",txtSize).commit();
        }
    });

В вашем фрагменте

 @Override
public void onResume() {
    super.onResume();
    title.setTextSize(getActivity().getSharedPreferences("MY_SHARED",0).getInt("FONT_SIZE",20));
    ADAPTER_OF_YOUR_LISTVIEW.notifyAll();
}
Другие вопросы по тегам