2016-12-17 1 views
-2

Я просмотрел почти все сообщения в стеке, но не нашел ничего подобного моей проблеме. У меня есть fragment в viewpager, и в этом фрагменте есть класс, давайте назовем его customClass. Я начинаю деятельность с fragment, которая возвращает значение в onActivityResult фрагмента. Внутри я вызываю метод customClass, который обновляет textView с данными, полученными из пакета onActivityResault.TextView не обновляется ТЕКСТ

Фрагмент

public class clock_fragment extends Fragment { 

    customClass myClass; 

    public clock_fragment() { 

    } 

    @Override 
    public void onCreate(@Nullable Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setHasOptionsMenu(true); 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     return inflater.inflate(R.layout.fragment_clock, container, false); 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     if(item.getItemId() == R.id.menu_settings) { 
      Intent intent = new Intent(getActivity(), SettingsActivity.class); 
      startActivityForResult(intent, 0); 
     } 
     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { 
     super.onViewCreated(view, savedInstanceState); 


     myClass = new customClass(); 
     myClass.initializeValues(this, view); 

    } 


    @Override 
    public void onActivityResult(int requestCode, int resultCode, final Intent data) { 
     if (resultCode != RESULT_CANCELED) { 

      myClass.updateTextView(data.getStringExtra("currency", "fail")); 

     } 
    } 
} 

customClass

public class myClass { 

    final String TAG = "TAG"; 
    Fragment fragment; 
    TextView textView; 

    public myClass() { 

    } 


    public void initializeValues(clock_fragment f, View view) { 
     fragment = f; 
     textView = (TextView) view.findViewById(R.id.textView); 

    } 


    public void updateTextView(String value) { 

     textView.setText(value); 

     //i can change its colour 
     textView.setTextColor(fragment.getActivity().getResources().getColor(R.color.yellow)); 

     //i can print out its updated value, not the one being shown on the screen 
     Log.e(TAG, "updateCurrencyFromPreferences: "+textView.getText()); 
    } 
} 

Все методы называют хорошо, все выполняет. Я могу даже распечатать значение string в журнале, и он дает мне желаемый результат во всех методах. Текстовый вид текст ИЗМЕНЕНИЕ, подтвержденный с помощью textView.getText() и печать его в сообщении журнала, которое я положил в конце updateTextView(String value).

BUT textView не обновляет текст! Я пробовал так много всего. Я подумал, что это может иметь отношение к фрагменту, который не имеет такой же ссылки textView, потому что его воссоздают после того, как я запустил activity, а затем вернусь назад.

Я могу даже изменить textColour метода textView (в методе updateTextView), и это также работает нормально, я вижу, что это происходит, хотя текст не меняется. Я также попытался изменить текст на какой-то случайный фиктивный текст, но не повезло. Как я уже сказал, печать журнала messege с textView.getText() показывает обновленный текст в журнале, но он не совпадает с тем, что на экране (текст не меняется). Я даже пробовал передать textView от основного фрагмента к этому конкретному методу, но, увы, не повезло. PLS help: 'D

PS: Пользовательский класс уже имеет ссылку на textView, который создается из представления, переданного в конструктор. ВСЕ работает, нет ошибок или проблем с присвоением, только текст не обновление.

Буду рад предоставить дополнительную информацию, если этого недостаточно.

+0

Похоже, что 'customClass' имеет ссылку на другой' TextView', чем тот, который фактически отображается в 'Activity'. Пожалуйста, показать больше этого класса. В частности, как «textView» объявлен и инициализирован? Как создается и инициализируется переменная 'customClass' в вашей деятельности? –

+0

Это может быть частью проблемы. если это так, то почему я могу изменить цвет? и даже получить его обновленный текст? Я отредактирую свой вопрос, чтобы дать вам больше информации –

+0

Как вы меняете цвет? Пожалуйста, покажите больше кода. –

ответ

1

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

Если у вас все еще есть проблемы, вы можете попробовать обновить текст, разместив задержку runnabe.

+0

Как бы я сделал это с задержкой? Я уже пробовал runOnaUIThread –

+0

вот так: 'new Handler (Looper.getMainLooper()). PostDelayed (new Runnable() {setText();}, 1000);' – linjiang

+0

Кажется, что это работает, я могу даже установить 0s, и он все еще работает ... вроде. Он работает только для 1 textView. У меня теперь есть 2 textViews, но это устраняет проблему только для одного из них. Оба они инициализируются ТОЧНЫМ способом, используя одинаковые методы и все. Во втором текстовом окне все еще есть проблема, с которой столкнулся первый. Хотя я могу изменить цвет как нормально, так и их тексты DO изменить, но он отображает только одно из них. –