java - 如何通过按钮将 Activity 链接到 Fragment

标签 java android android-fragments linker

我有这个 fragment ,它是选项卡式 Activity 的一部分:

TranslateFragment.java

import android.content.Context;
import android.content.Intent;
import android.database.DataSetObserver;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Adapter;
import android.widget.Button;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

import androidx.fragment.app.Fragment;

import java.util.ArrayList;




public class TranslateFragment extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {


        View rootView = inflater.inflate(R.layout.word_list, container, false);
        super.onCreate(savedInstanceState);
      View view=  inflater.inflate(R.layout.fragment_translate, container, false);



        Button numere =(Button) view.findViewById(R.id.numbers);

//        numere.setOnClickListener(new View.OnClickListener(){
//            @Override
//            public void onClick(View v)
//            {
//                Intent intent= new Intent(getActivity(), NumbersActivity.class);
//
//                startActivity(intent);
//
//            }
//        });





//// Numbers- Start
//        TextView numbers = (TextView) getView().findViewById(R.id.numbers);

//        numbers.setOnClickListener(new View.OnClickListener(){
//            @Override
//            public void onClick(View view){
//                Intent i= new Intent(getActivity(), NumbersActivity.class);
//
//                startActivity(i);
//            }
//        });
//
//        numbers.setOnLongClickListener(new View.OnLongClickListener() {
//            @Override
//            public boolean onLongClick(View v) {
//                Toast.makeText(v.getContext(), "Open the list of numbers", Toast.LENGTH_LONG).show();
//                return false;
//            }
//        });
//
//        //Numbers- Finish
   return view;
    }
}

这是整个 Activity 的一部分,但现在我只需要链接该按钮

这是我想要达到的 Activity :

package com.example.touristguidebrasov;

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.util.ArrayList;

public class NumbersActivity extends AppCompatActivity {
    MediaPlayer msound;


    private AudioManager mAudioManager;

    AudioManager.OnAudioFocusChangeListener listener= new AudioManager.OnAudioFocusChangeListener() {
        @Override
        public void onAudioFocusChange(int focusChange) {
            if(focusChange == AudioManager.AUDIOFOCUS_GAIN ){
                msound.start();
            }
            else
            if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT || focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK){
                msound.pause();
                msound.seekTo(0);
            }
            else
            if (focusChange == AudioManager.AUDIOFOCUS_LOSS)
            {releaseMediaPlayer();}

        }
    };

    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.
            releaseMediaPlayer();
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.word_list);


        mAudioManager= (AudioManager) getSystemService(Context.AUDIO_SERVICE);


//Create an array
        final ArrayList<Word> numbers= new ArrayList<Word>();
        numbers.add(new Word("Zero", "Zero", R.mipmap.number_0, R.raw.zero));
        numbers.add(new Word("Unu", "One", R.mipmap.number_1, R.raw.unu));
        numbers.add(new Word("Doi", "Two", R.mipmap.number_2, R.raw.doi));
        numbers.add(new Word("Trei", "Three", R.mipmap.number_3, R.raw.trei));
        numbers.add(new Word("Patru", "Four",R.mipmap.number_4, R.raw.patru));
        numbers.add(new Word("Cinci","Five",R.mipmap.number_5, R.raw.cinci));
        numbers.add(new Word("Șase", "Six",R.mipmap.number_6, R.raw.sase));
        numbers.add(new Word("Șapte","Seven",R.mipmap.number_7, R.raw.sapte));
        numbers.add(new Word("Opt", "Eight",R.mipmap.number_8, R.raw.opt));
        numbers.add(new Word("Nouă", "Nine",R.mipmap.number_9, R.raw.noua));
        numbers.add(new Word("Zece", "Ten",R.mipmap.number_10, R.raw.zece));
        numbers.add(new Word("Douăzeci", "Twenty",R.mipmap.number_20, R.raw.douazeci));
        numbers.add(new Word("Treizeci", "Thirty",R.mipmap.number_30, R.raw.treizeci));
        numbers.add(new Word("Patruzeci", "Forty",R.mipmap.number_40, R.raw.patruzeci));
        numbers.add(new Word("Cincizeci", "Fifty",R.mipmap.number_50, R.raw.cincizeci));
        numbers.add(new Word("Șaizeci", "Sixty",R.mipmap.number_60, R.raw.saizeci));
        numbers.add(new Word("Șaptezeci", "Seventy",R.mipmap.number_70, R.raw.saptezeci));
        numbers.add(new Word("Optzeci", "Eighty",R.mipmap.number_80, R.raw.optzeci));
        numbers.add(new Word("Nouăzeci", "Ninety",R.mipmap.number_90, R.raw.nouazeci));
        numbers.add(new Word("O sută", "One hundred",R.mipmap.number_100, R.raw.osuta));






        WordAdapter itemsAdapter = new WordAdapter(this,  numbers);

        ListView listView = (ListView) findViewById(R.id.list);

        listView.setAdapter(itemsAdapter);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                releaseMediaPlayer();

                Toast.makeText(getBaseContext(), "Sound on!",Toast.LENGTH_SHORT ).show();
                Word word= numbers.get(position);
                releaseMediaPlayer();

                int result= mAudioManager.requestAudioFocus(listener, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);

                if(result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) {


                    msound = MediaPlayer.create(getBaseContext(), word.getAudio_Resource_id());
                    msound.start();

                    msound.setOnCompletionListener(mCompletionListener);
                }



            }
        });

    }

    @Override
    protected void onStop() {
        super.onStop();
        releaseMediaPlayer();
    }

    private void releaseMediaPlayer() {
        // If the media player is not null, then it may be currently playing a sound.
        if (msound != null) {
            // Regardless of the current state of the media player, release its resources
            // because we no longer need it.
            msound.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.
            msound = null;
            mAudioManager.abandonAudioFocus(listener);
        }
    }



}

该 Activity 取 self 在谷歌类(class)之后构建的一个旧应用程序,它运行良好。我唯一的问题是链接 fragment 和 Activity 。 我尝试了每个教程,但没有找到任何解决方案。我想做一些类似于 Whatsapp 在按下对话时所做的事情。 谢谢! :)

最佳答案

你已经做到了。这段代码完全符合您的要求。

numere.setOnClickListener(new View.OnClickListener(){
       @Override
       public void onClick(View v){
           Intent intent= new Intent(requireActivity(), NumbersActivity.class);
           startActivity(intent);
       };
});

确保您在 AndroidManifest 文件中定义了您的 Activity

Hint: you should use requireActivity() instead of getActivity()

关于java - 如何通过按钮将 Activity 链接到 Fragment,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59847725/

相关文章:

android - 如果我没有任何数据要存储,在使用 GCM 时是否需要后端服务器作为中介?

java - 将 gradle 库导入 Eclipse

android - 错误重复条目 : com/google/android/gms/common/api/zze. 类

android-fragments - 显示/隐藏片段并以编程方式更改可见性属性

android - 将扩展 fragment 添加到 Activity

java - Play Framework sbt assembly jar运行报错:- "No root server path supplied"

java - Linux编译Java项目

android - 如何知道用户已从应用程序中的 1 个位置单击任何 Activity 屏幕

java - 错误: int cannot be converted to class?

java - 最好抽象出细节还是使用 setter ?