Fragment的ListView项接口定义中的按钮?

Posted

技术标签:

【中文标题】Fragment的ListView项接口定义中的按钮?【英文标题】:Button in Fragment's ListView item Interface Definition? 【发布时间】:2013-02-24 02:11:11 【问题描述】:

在我的应用中,我有一个在操作栏标签导航模式下有两个片段的活动,就像 android 开发者网站示例一样。

在我的第一个片段中,我有一个列表视图(它有自己的适配器),并且列表视图的每个项目都有一个名为 +1 的按钮。我想刷新第二个片段,该片段在第一个片段中显示列表视图中的项目,他们的 +1 按钮被点击。

我知道我必须使用接口。但我不知道如何使用它们。我必须在哪里定义接口?如何使用它?以及如何从活动中访问它以刷新第二个片段?

快速帮助会很棒。谢谢。

【问题讨论】:

您想通过单击“每个 listItem 内的按钮”还是在使用界面单击每个 listItem 时导航到第二个片段? @Santhosh 不,我想添加单击的项目按钮(从第一个片段)以显示在第二个片段的列表视图中(通过刷新第二个片段,数据被保留在文件中)。这意味着我必须在第一个片段内的列表视图项的按钮和包含这两个片段的活动之间进行通信。 【参考方案1】:

如果你想要它在列表项上点击

片段 A:

public class FragmentA extends ListFragment 

OnItemSelectedListener mListener;

...
// Container Activity must implement this interface
public interface OnItemSelectedListener 
    public void onItemSelected(int position);

...

@Override
public void onAttach(Activity activity) 
    super.onAttach(activity);
    try 
        mListener = (OnItemSelectedListener) activity;
     catch (ClassCastException e) 
        throw new ClassCastException(activity.toString() + " must implement OnItemSelectedListener");
    


@Override
public void onListItemClick(ListView l, View v, int position, long id) 

    mCallback.onItemSelected(position);

       

容器活动:

public class ContainerActivity extends FragmentActivity 
    implements FragmentA.OnItemSelectedListener


//...



public void onItemSelected(int Position/*pass anything which u want*/) 
    

        SecondFragment second_fragment = (SecondFragment) getSupportFragmentManager().findFragmentById(R.id.fragmentB);

        if(second_fragment !=null)
        
            second_fragment.UpdateUI(Position); 
        

    


 

第二个片段:

public class SecondFragment extends Fragment 

    ...
    public void UpdateUI(Position)
    

    


希望这会有所帮助。单击每个列表项中的按钮可能有点困难,但请尝试相同的方法。可能您必须编写接口声明并在您的自定义适配器中调用。

【讨论】:

我会测试一下。但是我必须添加这个,单击的按钮在列表视图项中。所以接口声明必须在片段范围内还是列表视图范围的适配器?谢谢 是的,这就是我的想法和建议。但是,我不能肯定它会起作用,因为我还没有处理过这样的要求。 这个怎么样:在listview适配器中声明接口->在托管活动中调用它->从那里调用片段中的另一个方法?我说的对吗? 是的,在 Adapter 类中声明接口。在托管活动中实现它并在单击每个列表项中的按钮时调用该方法(即在适配器的 getView() 方法中)。两天后我无法登录,因此回复晚了。希望您已经解决了您的问题。

以上是关于Fragment的ListView项接口定义中的按钮?的主要内容,如果未能解决你的问题,请参考以下文章

处理Fragment类ListView的按钮事件?

网络请求(viewPager,Fragment,ListView)

片段中的自定义列表视图。未找到布局

片段内 Listview 中动态视图的 onClick 侦听器

Viewpager Fragment中的Android Listview-不滚动

Fragment 中的上下文菜单使用来自不同 Fragment 的 ListView: registerForContextMenu(getListView())