如何在片段中点击监听器项目并反映在另一个片段中

时间:2015-10-06 09:32:58

标签: android

我想点击片段A中listitems中的特定按钮,然后特定项目应反映到片段B中。

当我点击特定项目的特定按钮时,该项目应该反映在片段B中。 当我点击ram前面的按钮时,ram应该反映在片段B

当我点击Holly前面的按钮时,Holly应该反映在片段B中。 为此,我该怎么办?

这是我的代码:

A类

public class A extends ListFragment {

    ViewHolder viewHolder;

    Context mContext;
    ArrayList<HashMap<String, String>> list;

    SimpleAdapter adapter;
    String[] names = new String[] { "Ram", "Abhi", "Rohit", "Holly", "James",
            "Hana", "Jack", "Ram" };
    Integer[] imageId = new Integer[] { R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher, R.drawable.ic_launcher,
            R.drawable.ic_launcher,

    };

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


        List<HashMap<String, String>> aList = new ArrayList<HashMap<String, String>>();

        for (int i = 0; i < names.length; i++) {
            HashMap<String, String> hm = new HashMap<String, String>();
            hm.put("txt", "   " + names[i]);
            hm.put("flag", Integer.toString(imageId[i]));
            aList.add(hm);
        }

        String[] from = { "flag", "txt" };

        int[] to = { R.id.flag, R.id.txt };

        SimpleAdapter adapter = new SimpleAdapter(getActivity()
                .getBaseContext(), aList, R.layout.listitems, from, to);

        setListAdapter(adapter);

        return super.onCreateView(inflater, container, savedInstanceState);

    }
}

B类

public class B extends Fragment {

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

    return V;
    }

}

3 个答案:

答案 0 :(得分:1)

您可以使用EventBus

单击片段-A中的按钮,发布事件。

现在Fragment-B正在收听该事件,所以每当你发布事件时,Fragment-B都会收到通知。

示例

  1. 相关性:

    如果您正在使用eclipse,请从here下载jar文件如果您使用的是Android Studio,则添加依赖项

    compile 'de.greenrobot:eventbus:2.4.0'
    
  2. 定义事件:

    public class MessageEvent {

    private final int position;
    
    /* Additional fields if needed */
    public MessageEvent(int position) {
        this.position = position;
    }
    
    public int getPosition() {
        return position;
    }
    

    }

  3. 准备订阅者:

    您获得事件通知的片段。

    public class FragmentB extends Fragment {
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        EventBus.getDefault().register(this);
    }
    
    @Override
    public void onDestroy() {
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }
    
    public void onEventMainThread(MessageEvent event) {
        // put your code here for update list item  
        event.getPosition();
        // you can also add extra other field in MessageEvent
    }
    

    }

  4. 发布活动:

    在你想要通知的片段-A中

    EventBus.getDefault().post(new MessageEvent(ITEM_POSITION));
    

答案 1 :(得分:0)

处理片段A上的listview的setOnItemClickListener,并将该值作为附加内容传递给片段B。

答案 2 :(得分:0)

在Fragment A中添加一个接口并在Fragment B中实现该接口。根据回调方法中传递的值,在Fragment B中进行适当的更改。