android - 如何为从另一个 fragment 接收到的 fragment 的 TextView 设置值?

标签 android android-fragments bundle textview

当从另一个 fragment 接收到值时,我不知道如何在第二个 fragment 的 TextView 中设置。我在第二个 fragment 中收到的数据是 StringList 的 "value" 对象,但我现在不知道如何为其设置数据。

字符串列表类:

public class StringList {

    public String authorName;
    public String headline;
    public String publishedTime;
    public String newsDetail;

}

主要 Activity :

//only useful code pasted below for tranfering thre value from fragment to another fragment and i have implemented the TransferValue to the mainActivity

        public void sendValue(StringList value, int positionValue) {

            FragmentTransaction transaction = frag.beginTransaction();
            BusinessDetail businessDetail = new BusinessDetail();
            businessDetail.receiveValue(value, positionValue);
            transaction.replace(R.id.content_frame, businessDetail);
            transaction.commit();

        }

fragment 1:

    public class Business extends Fragment  {

        public List<StringList> businessNews = new ArrayList<>();

        TransferValue SendData;//here

        private RecyclerView recyclerView;
         public Business() {

        }

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                 Bundle savedInstanceState) {

            View view = inflater.inflate(R.layout.fragment_business, container, false);
            recyclerView = (RecyclerView) view.findViewById(R.id.business_recycler_view);

            FetchLists f = new FetchLists();
            f.execute(10, 0);
            return view;
        }

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

        @Override
        public void onAttach(Context context) {
            super.onAttach(context);
    //here
            try {
                SendData = (TransferValue) context;
            } catch (ClassCastException e) {
                Log.d("ashu", "implement the methods");
                throw new ClassCastException("implemented the methods");
            }
        }

//here
        public interface TransferValue {

            public void sendValue(StringList value, int positionValue);

        }

        public class FetchLists extends AsyncTask<Integer, Void, List<StringList>> {

            @Override
            protected List<StringList> doInBackground(Integer... params) {

                int count = params[0];
                int offset = params[1];
    //api key changed
                String urlString = "https://newspi.og/v1/article?source=bloomerg&sortBy=tp&apiKey=5fdfd54f4aba5a5fdfvdf476ff528a8";
                urlString = urlString + "&count=" + count + "&offset=" + offset;

                try {
                    URL url = new URL(urlString);
                    HttpURLConnection connection = (HttpURLConnection) url.openConnection();
                    connection.setRequestMethod("GET");
                    InputStream stream = connection.getInputStream();
                    BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
                    String line = reader.readLine();
                    String response = "";
                    while (line != null) {
                        response += line;
                        line = reader.readLine();
                    }

                    JSONObject object = new JSONObject(response);
                    JSONArray emailLists = object.getJSONArray("articles");

                    for (int i = 0; i < emailLists.length(); i++) {
                        JSONObject listData = (JSONObject) emailLists.get(i);

                        StringList stringList = new StringList();
                        stringList.authorName = listData.getString("author");
                        stringList.headline = listData.getString("title");
                        stringList.publishedTime = listData.getString("publishedAt");
                        stringList.newsDetail = listData.getString("description");

                        businessNews.add(stringList);
                    }

                } catch (Exception e) {
                    e.printStackTrace();
                }
                return businessNews;
            }

            @Override
            protected void onPostExecute(List<StringList> result) {
                super.onPostExecute(result);

                recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
                BusinessAdapter adapter = new BusinessAdapter(Business.this, result);
                recyclerView.setAdapter(adapter);

            }
        }

        public class BusinessAdapter extends RecyclerView.Adapter<BusinessHolder> {

            int prevposition = 0;
            private List<StringList> c;

            public BusinessAdapter(Business context, List<StringList> result) {
                c = context.businessNews;

            }

            @Override
            public BusinessHolder onCreateViewHolder(ViewGroup parent, int viewType) {

                Context context = parent.getContext();
                LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                View view = inflater.inflate(R.layout.layout_news, parent, false);

                return new BusinessHolder(view);
            }

            @Override
            public void onBindViewHolder(BusinessHolder holder, int position) {

                StringList m = c.get(position);
                holder.bindListName(m, position);

            @Override
            public int getItemCount() {
                return c.size();
            }
        }

        public class BusinessHolder extends RecyclerView.ViewHolder {

            public TextView headlineTextview;
            public TextView authorTextview;
            public TextView timeTextview;

            public BusinessHolder(View itemView) {
                super(itemView);

                headlineTextview = (TextView) itemView.findViewById(R.id.id_headline);
                authorTextview = (TextView) itemView.findViewById(R.id.id_author);
                timeTextview = (TextView) itemView.findViewById(R.id.id_time);

            }

            public void bindListName(final StringList stringList, final int position) {

                headlineTextview.setText(stringList.headline);
                authorTextview.setText(stringList.authorName);
                timeTextview.setText(stringList.publishedTime);

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

                         BusinessDetail s = new BusinessDetail();
                        FragmentTransaction transaction = getFragmentManager().beginTransaction();
                        transaction.replace(R.id.content_frame, s);
                        transaction.addToBackStack(null);
                        transaction.commit();
                    } });}}}}

fragment 2:

public class BusinessDetail extends Fragment {

    Bundle bundle;
    private TextView headlineSecond;
    private TextView authorSecond;
    private TextView detailsSecond;
    private List<StringList> s;

    public BusinessDetail() {
    }

    public void receiveValue(StringList value, int positionValue) {

        bundle = new Bundle();
        bundle.putString("news", value.authorName);
      }

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

        headlineSecond = (TextView) view.findViewById(R.id.id_headline_second);
        authorSecond = (TextView) view.findViewById(R.id.id_author_second);
        detailsSecond = (TextView) view.findViewById(R.id.id_details_second);

// I want to set the values received to the textview here

        return view;}}

最佳答案

您可以使用 Parcelable 将任何自定义类数据的数组列表从一个 Activity/fragment 发送到下一个 Activity/fragment 。

在前面的 fragment 中,使用 putParcelableArrayList 方法将数据添加到包中。例如

bundle.putParcelableArrayList("KEY_NAME",arrayName);

在下一个 frgament 中使用 getParcelableArrayList 方法在 onCreate 中获取该数据。

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (getArguments() != null) {
        ArrayList<Item> itemArray = getArguments().getParcelableArrayList("KEY_NAME");
    }
}

最主要的是将您的 StringList 类更改为 Parcelable。对于 Parcelable 类示例,请单击下面的链接..

Parcelable Class

关于android - 如何为从另一个 fragment 接收到的 fragment 的 TextView 设置值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43424281/

相关文章:

java - 当我从另一个 Activity 中删除元素时,如何清除一个 Activity 的数组列表?

android - 为移动应用程序创建服务器端(android)

android - 一个 fragment 的菜单项显示在另一个 fragment 中

android - onItemClickListener 在 GridView 中没有响应

android - 为什么清除 FLAG_TRANSLUCENT_STATUS 标志后我的布局变得困惑?

xcode4 - 如何将.fsh/.vsh着色器文件添加到Xcode,以便将它们自动添加到“复制 bundle 资源”阶段?

asp.net-mvc-4 - 如何解决Antlr3依赖 hell

android - 如何检查用户是否输入了促销代码?

java - 自 API 26 起,如何从现有文件 URI 保存/覆盖文件?

java - 如何在 <string-array> 上使用 Java/Android 字符串格式