如何分别为多个ListView实现onItemClick()?

时间:2016-01-08 19:27:12

标签: java android android-fragments

我正在为一本书开发一个应用程序,它有13个单元,每个单元包含许多练习,每个练习包含许多扫描图像。

现在我有一个主菜单活动和2个片段,fragmentA用于显示ListView中的练习,fragmentB用于显示练习的扫描图像。

我的主菜单活动包含13个按钮,每个按钮用于加载该单元的练习。

我已经为每个单元分别创建了练习的ArrayLists,当用户点击特定单元时将它们加载到fragmentA中。

我在主菜单活动中为每个单元的按钮点击创建了一个Switch Case,它在listview中加载了该特定单元的ArrayList。

Onbackpress它将用户从fragmentA返回到主菜单。

现在我正在尝试为ListViews上的点击实现OnItemClick(),这些点击会在每个单元的每个练习中加载到fragmentA中。

如果我在fragmentA OncreatView中设置toast,它会为它们分配所有单元的所有ListView。 但是我想对每个单元的每个练习分开进行,即对于我所有ArrayLists中的所有条目。

正在使用bundle将数据从ArayLists传递到fragmentA,就像这样

 @Override
public void onClick(View view) {
    switch (view.getId()){
        case R.id.button1:
            bundle = new Bundle();
            bundle.putStringArrayList(LISTVIEW_DATA, unit1);
            break;
        case R.id.button2:
            bundle = new Bundle();
            bundle.putStringArrayList(LISTVIEW_DATA, unit2);
            break;
        case R.id.button3:
            bundle = new Bundle();
            bundle.putStringArrayList(LISTVIEW_DATA,  unit3);
            break;
 default:
            break;
    }

    setListFragment(bundle);
}
private void setListFragment(Bundle arguments) {
    Fragment fragment = new ExFragment();

    if (arguments != null) {
        fragment.setArguments(arguments);
    }

    FragmentManager fragmentManager = getFragmentManager();
    FragmentTransaction ft = fragmentManager.beginTransaction();
    ft.replace(R.id.container, fragment);
    ft.addToBackStack("");
    ft.commit();
}

这是我在fragmentA中的onItemClick。

@Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id)

我知道它非常基本的问题,但我已经上了好几个小时了。

谢谢

我有13个ArrayLists的一个fragmentA,一次只显示一个,我正在寻找一种方法来为13个列表视图中的所有项目分配onitemclick。

2 个答案:

答案 0 :(得分:4)

对于遇到与我相同情况的任何人,我为每个案例分配了一个名为DATA_TYPE的标记,并为switch case片段中的每个标记设置了on create view并解决了问题

  @Override
public void onClick(View view) {
switch (view.getId()){
    case R.id.button1:
        bundle = new Bundle();
        bundle.putString(MainActivityFragment.DATA_TYPE, DATA_TYPE1);
        bundle.putStringArrayList(LISTVIEW_DATA, items1);
        break;
    case R.id.button2:
        bundle = new Bundle();
        bundle.putString(MainActivityFragment.DATA_TYPE, DATA_TYPE2);
        bundle.putStringArrayList(LISTVIEW_DATA, items2);
        break;
    case R.id.button3:
        bundle = new Bundle();
        bundle.putString(MainActivityFragment.DATA_TYPE, DATA_TYPE3);
        bundle.putStringArrayList(LISTVIEW_DATA, items3);
        break;
    default:
        break;
}

setListFragment(bundle);
}

MainActivityFragment是片段类的名称。 希望它对某人有帮助

答案 1 :(得分:0)

public class MyViewHolder extends RecyclerView.ViewHolder implements 
    View.OnClickListener {

    TextView name,  summary,  publishT;
    NetworkImageView  imageView;
    Button sharesNews;

    List<NewsDataModel> highlights = new ArrayList<NewsDataModel>();
    Context ctx;

    @SuppressWarnings("SpellCheckingInspection")
    public MyViewHolder(View itemView, Context ctx, List<NewsDataModel> 
      highlights) {

        super( itemView );
        this.ctx = ctx;
        this.highlights = highlights;

        name = itemView.findViewById( R.id.titlehgh );
        summary = itemView.findViewById( R.id.summaryhgh );
        publishT = itemView.findViewById( R.id.publishtH );
        imageView = itemView.findViewById( R.id.thumbnailhgh );

        itemView.setOnClickListener( this );

        sharesNews = itemView.findViewById( R.id.shares );

    }

    @Override
    public void onClick(View view) {

        int position = getAdapterPosition();
        NewsDataModel newsDataModel = this.highlights.get( position );
        Intent intent = new Intent ( this.ctx, NewsDetailsActivity.class );

        intent.putExtra( "id", newsDataModel.getId() );
        this.ctx.startActivity( intent );
    }
}