android - 如何将数据从 Activity 发送到其父 fragment ?

标签 android listview android-fragments android-intent android-activity

<分区>

我有一个主要 Activity ,其中有一个带有 ImageView 的 fragment 。单击此 ImageView 时,将启动一个包含 ListView 的新 Activity 。我想返回用户点击这个 ListView 的位置(索引),返回到 fragment 。

fragment 代码

package com.example.kedee.testgradle;


import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;


/**
 * A simple {@link Fragment} subclass.
 */
public class ASKFragment extends Fragment implements View.OnClickListener{
    private Context context;
    private View rootView;
    private int pos;

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


    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        rootView= inflater.inflate(R.layout.fragment_ask, container, false);
        context=inflater.getContext();
        setListeners();
        return  rootView;
    }

    void setListeners(){
        ImageView catIcon=(ImageView)rootView.findViewById(R.id.cat_icon);
        catIcon.setOnClickListener(this);



    }

    @Override
    public void onClick(View v) {
        int vID=v.getId();
        if(vID==R.id.cat_icon){
            Intent intent=new Intent(getActivity(),ASK.class);
            getActivity().startActivity(intent);
        }

    }
}    

从此 fragment 中调用的 Activity 代码。 (提问 Activity )

package com.example.kedee.testgradle;

import android.app.Fragment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class ASK extends AppCompatActivity {
    private int index;
    private String[] catNames= {"Acad","Emer","Tech","Exam","Station","Finance","Medical","Place","Sports" ,
            "Others" };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_ask);
        ListView listView=(ListView)findViewById(R.id.ask_cat_listView);
        listView.setAdapter(new ArrayAdapter<String>(this,android.R.layout.simple_list_item_multiple_choice,catNames));
        listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            public void onItemClick(AdapterView<?> listView, View v, int pos, long id){
                index=pos;
                //code to return back this index to the parent fragment?
            }
        });
    }


}

最佳答案

使用 startActivityForResult

<强>1。在 ASKFragment 中

Intent intent=new Intent(getActivity(),ASK.class);
getActivity().startActivityForResult(intent, 22 /* any other request code you want */);

<强>2。有意传递位置。

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){
            public void onItemClick(AdapterView<?> listView, View v, int pos, long id){
                index=pos;
                Intent i = new Intent();
                i.putExtra("position", index);
                setResult(RESULT_OK, i);
                finish();
            }
        });

<强>3。您要添加或替换 fragment 的 Activity 。

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == 22 && resultCode == RESULT_OK) {
            // get the position from intent
            if(data.getExtras()!=null && data.hasExtra("position")){
               int position = data.getExtras().getInt("position");
               // pass this position to fragment.
            }
        }
    }

编辑
将 Activity 中的值发送到 fragment 。
1) 在 fragment 中创建函数

public void getPositionOfList(int position){
   // here is the position
}

2) 从 Activity 调用 fragment 方法。

if (requestCode == 22 && resultCode == RESULT_OK) {
                // get the position from intent
                if(data.getExtras()!=null && data.hasExtra("position")){
                   int position = data.getExtras().getInt("position");
                   // pass this position to fragment.
                   ((ASKFragment)fragmentManager.findFragmentById(/*id of your container*/)).getPositionOfList(position);
                }
            }

关于android - 如何将数据从 Activity 发送到其父 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35812753/

相关文章:

android - 将位置从 ListView 传递到新 Activity

android - FindViewbyId 在 Fragment 中总是返回 Null

android - Firebase 是否有用于下载 Firebase 存储中的视频的库?

android - 自动调用并播放录音消息

listview - 在ReorderableListView中时,CheckBox动画不起作用

c# - 缩小所选项目 ListView 的选择区域

android - 选择特定 fragment 时如何隐藏抽屉导航 `menuitems`?

java - 打开通知后 fragment 不会更新

java - Android Studio 上的 NoClassDefFoundError R$string

java - 升级Android项目以使用java 8并超出GC开销限制