我正在为一本书开发一个应用程序,它有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。
答案 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 );
}
}