Adapter类中的文本大小更改会更新所有活动中的文本大小

时间:2018-07-01 05:34:34

标签: java android android-arrayadapter textview android-context

以下是我的WordAdapter

public class WordAdapter extends ArrayAdapter<Word>  {

/** Resource ID for the background color for this list of words */
private int mColorResourceId;



/**
 * Create a new {@link WordAdapter} object.
 *
 * @param context is the current context (i.e. Activity) that the adapter is being created in.
 * @param words is the list of {@link Word}s to be displayed.
 * @param colorResourceId is the resource ID for the background color for this list of words
 */
public WordAdapter(Context context, ArrayList<Word> words, int colorResourceId) {
    super(context, 0, words);
    mColorResourceId = colorResourceId;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    // Check if an existing view is being reused, otherwise inflate the view
    View listItemView = convertView;
    if (listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.list_item, parent, false);
    }

    // Get the {@link Word} object located at this position in the list
    final Word currentWord = getItem(position);

    // Find the TextView in the list_item.xml layout with the ID miwok_text_view.
    TextView miwokTextView = (TextView) listItemView.findViewById(R.id.miwok_text_view);
    // Get the Miwok translation from the currentWord object and set this text on
    // the Miwok TextView.
    miwokTextView.setText(currentWord.getMiwokTranslationId());

    // Find the TextView in the list_item.xml layout with the ID default_text_view.
    TextView defaultTextView = (TextView) listItemView.findViewById(R.id.default_text_view);
    // Get the default translation from the currentWord object and set this text on
    // the default TextView.
    defaultTextView.setText(currentWord.getDefaultTranslationId());

    TextView onClickTextView = (TextView) listItemView.findViewById(R.id.miwok_text_view_on_click);

    onClickTextView.setText((currentWord.getTextOnClickId()));

    final ImageView playIcon = (ImageView) listItemView.findViewById(R.id.play_icon);
    final ImageView playIconPlaying = (ImageView) listItemView.findViewById(R.id.play_icon_playing);

    // Find the ImageView in the list_item.xml layout with the ID image.
    final ImageView imageView = (ImageView) listItemView.findViewById(R.id.image);


    // Check if an image is provided for this word or not
    if (currentWord.hasImage()) {
        // If an image is available, display the provided image based on the resource ID
        imageView.setImageResource(currentWord.getImageResourceId());
        // Make sure the view is visible
        imageView.setVisibility(View.VISIBLE);
    } else {
        // Otherwise hide the ImageView (set visibility to GONE)
        imageView.setVisibility(View.GONE);
    }

        if (Activity1.isActive == true){
                onClickTextView.setTextSize(55);
    } else { 
                onClickTextView.setTextSize(35);
    }

           if (Activity3.isActive == true){
                onClickTextView.setTextSize(55);
    } else {
                onClickTextView.setTextSize(35);
    }


    // add a tag to determine the position of the view, when the view is clicked.
    imageView.setTag(position);

    // Set the theme color for the list item
    View textContainer = listItemView.findViewById(R.id.text_container);
    // Find the color that the resource ID maps to
    int color = ContextCompat.getColor(getContext(), mColorResourceId);
    // Set the background color of the text container View
    textContainer.setBackgroundColor(color);

    // Return the whole list item layout (containing 2 TextViews) so that it can be shown in
    // the ListView.

    // ImageView imageView = (ImageView) listItemView.findViewById(R.id.list_item);

        imageView.setOnClickListener(new ImageView.OnClickListener() {
        @Override
        public void onClick(View view) {


            if(currentWord.isFlag){
                currentWord.isFlag = false;
                Word.flaggedPosition = -1;
            }else{
                if  (Word.flaggedPosition >=0) {
                    Word.adapter.getItem(Word.flaggedPosition).isFlag = false;
                }
                currentWord.isFlag = true;
                Word.flaggedPosition = position;
            }
            notifyDataSetChanged();
        }

    });

    if(currentWord.isFlag)
    {

        imageView.setAlpha(60);
        onClickTextView.setVisibility(View.VISIBLE);
    }
    else
    {
        imageView.setAlpha(255);
        onClickTextView.setVisibility(View.INVISIBLE);
    }

    return listItemView;
}
}

它的onClickTextView TextView是我希望在“活动”中更改的...

activity2的textView大小没有变化,为35sp

以下是我的VarnamalaFragment类

public class VarnamalaFragment extends Fragment {

/** to check whether Acitivity is Active */
static boolean isActive = true;

/** Stores the last selected position */
private int lastSelectedPosition = -1;

/** Handles playback of all the sound files */
private MediaPlayer mMediaPlayer;

/** Handles audio focus when playing a sound file */
private AudioManager mAudioManager;

// Create a list of words
private ArrayList<Word> words = new ArrayList<Word>();

 /**
 * This listener gets triggered whenever the audio focus changes
 * (i.e., we gain or lose audio focus because of another app or device).
 */
private AudioManager.OnAudioFocusChangeListener mOnAudioFocusChangeListener = new AudioManager.OnAudioFocusChangeListener() {
    @Override
    public void onAudioFocusChange(int focusChange) {
        if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT ||
                focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) {
            // The AUDIOFOCUS_LOSS_TRANSIENT case means that we've lost audio focus for a
            // short amount of time. The AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK case means that
            // our app is allowed to continue playing sound but at a lower volume. We'll treat
            // both cases the same way because our app is playing short sound files.

            // Pause playback and reset player to the start of the file. That way, we can
            // play the word from the beginning when we resume playback.
            mMediaPlayer.pause();
            mMediaPlayer.seekTo(0);
        } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) {
            // The AUDIOFOCUS_GAIN case means we have regained focus and can resume playback.
            mMediaPlayer.start();
        } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) {
            // The AUDIOFOCUS_LOSS case means we've lost audio focus and
            // Stop playback and clean up resources
            releaseMediaPlayer();
        }
    }
};

/**
 * This listener gets triggered when the {@link MediaPlayer} has completed
 * playing the audio file.
 */
private MediaPlayer.OnCompletionListener mCompletionListener = new MediaPlayer.OnCompletionListener() {
    @Override
    public void onCompletion(MediaPlayer mediaPlayer) {
        // Now that the sound file has finished playing, release the media player resources.

        if(lastSelectedPosition != -1){
            Word lastWord = words.get(lastSelectedPosition);
            lastWord.isPlaying = false;
            lastSelectedPosition = -1;
            Word.adapter.notifyDataSetChanged();
        }

        releaseMediaPlayer();
    }
};

public VarnamalaFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.word_list, container, false);

    // Create and setup the {@link AudioManager} to request audio focus
    mAudioManager = (AudioManager) getActivity().getSystemService(Context.AUDIO_SERVICE);

    words.add(new Word(R.string.letter_a, R.string.miwok_letter_a,
            R.drawable.a_se_anaar,R.string.miwok_letter_a_only, R.raw.a_se_anaar_audio));
    words.add(new Word(R.string.letter_aa, R.string.miwok_letter_Aa,
            R.drawable.aa_se_aam, R.string.miwok_letter_Aa_only, R.raw.aa_se_aam_audio));
    words.add(new Word(R.string.letter_e, R.string.miwok_letter_E,
            R.drawable.e_se_emli,R.string.miwok_letter_E_only, R.raw.e_se_emli_audio));

    // Create an {@link WordAdapter}, whose data source is a list of {@link Word}s. The
    // adapter knows how to create list items for each item in the list.
   Word.adapter = new WordAdapter(getActivity(), words, R.color.category_varnamala_vowels);

    // Find the {@link ListView} object in the view hierarchy of the {@link Activity}.
    // There should be a {@link ListView} with the view ID called list, which is declared in the
    // word_list.xml layout file.
    ListView listView = (ListView) rootView.findViewById(R.id.list);

    // Make the {@link ListView} use the {@link WordAdapter} we created above, so that the
    // {@link ListView} will display list items for each {@link Word} in the list.
    listView.setAdapter(Word.adapter);

    // Set a click listener to play the audio when the list item is clicked on
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
            // Release the media player if it currently exists because we are about to
            // play a different sound file
            releaseMediaPlayer();

            // Get the {@link Word} object at the given position the user clicked on
            Word word = words.get(position);
            word.isPlaying = true;

            if(lastSelectedPosition != -1){
                Word lastWord = words.get(lastSelectedPosition);
                lastWord.isPlaying = false;

            }

            lastSelectedPosition = position;
            Word.adapter.notifyDataSetChanged();

            // Request audio focus so in order to play the audio file. The app needs to play a
            // short audio file, so we will request audio focus with a short amount of time
            // with AUDIOFOCUS_GAIN_TRANSIENT.
            int result = mAudioManager.requestAudioFocus(mOnAudioFocusChangeListener,
                    AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);

            if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {
                // We have audio focus now.

                // Create and setup the {@link MediaPlayer} for the audio resource associated
                // with the current word
                mMediaPlayer = MediaPlayer.create(getActivity(), word.getAudioResourceId());

                // Start the audio file
                mMediaPlayer.start();
                word.isPlaying = true;
                Word.adapter.notifyDataSetChanged();

                // Get the value of currentVolume
                int currentVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);

                // If currentVolume is set to 0, show Toast
                if (currentVolume ==0){
                    Toast.makeText(getContext(), "Please Turn the Volume Up ", Toast.LENGTH_SHORT).show();
                }

                // Setup a listener on the media player, so that we can stop and release the
                // media player once the sound has finished playing.
                mMediaPlayer.setOnCompletionListener(mCompletionListener);
            }
        }
    });

    return rootView;
}

@Override
public void onStart() {
    super.onStart();
    isActive = true;
 }

@Override
public void onStop() {
    super.onStop();
    isActive = false;

    // When the activity is stopped, release the media player resources because we won't
    // be playing any more sounds.
    releaseMediaPlayer();

}

/**
 * Clean up the media player by releasing its resources.
 */
private void releaseMediaPlayer() {
    // If the media player is not null, then it may be currently playing a sound.
    if (mMediaPlayer != null) {
        // Regardless of the current state of the media player, release its resources
        // because we no longer need it.
        mMediaPlayer.release();

        // Set the media player back to null. For our code, we've decided that
        // setting the media player to null is an easy way to tell that the media player
        // is not configured to play an audio file at the moment.
        mMediaPlayer = null;

        // Regardless of whether or not we were granted audio focus, abandon it. This also
        // unregisters the AudioFocusChangeListener so we don't get anymore callbacks.
        mAudioManager.abandonAudioFocus(mOnAudioFocusChangeListener);
    }
}
}

我面临的问题是应用程序在包括activity2在内的所有活动中将文本大小更改为55sp,而我对此没有IF..ELSE阻止...

如何在activity1类的activity3Adapter中将textSize更改为55sp

我已经登录并检查了logcatisActivetruefalseactivity1的{​​{1}}值是否正确更新是活动的,而不是活动的。...

1 个答案:

答案 0 :(得分:0)

在您的情况下,您可以使用类名进行检查。喜欢,

context.getClass().getSimpleName() 

返回值“ Activity1”。

更新的类>>

public class WordAdapter extends ArrayAdapter<Word> {
private int mColorResourceId;
private Context mContext;

public WordAdapter(Context context, ArrayList<Word> words, int colorResourceId) {
    super(context, 0, words);
    mColorResourceId = colorResourceId;
    mContext = context;
}

@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    View listItemView = convertView;
    if (listItemView == null) {
        listItemView = LayoutInflater.from(getContext()).inflate(
                R.layout.list_item, parent, false);
    }

    final Word currentWord = getItem(position);

    TextView miwokTextView = (TextView) listItemView.findViewById(R.id.miwok_text_view);
    miwokTextView.setText(currentWord.getMiwokTranslationId());

    TextView defaultTextView = (TextView) listItemView.findViewById(R.id.default_text_view);
    defaultTextView.setText(currentWord.getDefaultTranslationId());

    TextView onClickTextView = (TextView) listItemView.findViewById(R.id.miwok_text_view_on_click);

    onClickTextView.setText((currentWord.getTextOnClickId()));

    final ImageView playIcon = (ImageView) listItemView.findViewById(R.id.play_icon);
    final ImageView playIconPlaying = (ImageView) listItemView.findViewById(R.id.play_icon_playing);

    final ImageView imageView = (ImageView) listItemView.findViewById(R.id.image);


    if (currentWord.hasImage()) {
        imageView.setImageResource(currentWord.getImageResourceId());
        imageView.setVisibility(View.VISIBLE);
    } else {
        imageView.setVisibility(View.GONE);
    }

    if (mContext.getClass().getSimpleName().equalsIgnoreCase("Activity1") || mContext.getClass().getSimpleName().equalsIgnoreCase("Activity3")) {
        onClickTextView.setTextSize(55);
    } else {
        onClickTextView.setTextSize(35);
    }


    imageView.setTag(position);

    View textContainer = listItemView.findViewById(R.id.text_container);
    int color = ContextCompat.getColor(getContext(), mColorResourceId);
    textContainer.setBackgroundColor(color);


    imageView.setOnClickListener(new ImageView.OnClickListener() {
        @Override
        public void onClick(View view) {


            if (currentWord.isFlag) {
                currentWord.isFlag = false;
                Word.flaggedPosition = -1;
            } else {
                if (Word.flaggedPosition >= 0) {
                    Word.adapter.getItem(Word.flaggedPosition).isFlag = false;
                }
                currentWord.isFlag = true;
                Word.flaggedPosition = position;
            }
            notifyDataSetChanged();
        }

    });

    if (currentWord.isFlag) {

        imageView.setAlpha(60);
        onClickTextView.setVisibility(View.VISIBLE);
    } else {
        imageView.setAlpha(255);
        onClickTextView.setVisibility(View.INVISIBLE);
    }

    return listItemView;
   }
}