【问题标题】:How to create an Intent within a fragment class如何在片段类中创建 Intent
【发布时间】:2017-08-22 16:53:30
【问题描述】:

我已经设法使用回收视图创建了一个选项卡式活动,并在每个片段中创建了一个列表视图,现在我有了使片段中的卡片可点击并创建启动新活动的意图所需的列表。我已经尝试过 on-click 方法和 onListItemClick,即使我知道这行不通。

基本上我需要为每个片段再创建一层列表,这将导致操作列表(网络视图、地图和信息)。

示例代码如下

ublic class LOneFragment extends Fragment {

public LOneFragment() {
    // Required empty public constructor
}

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

}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // Inflate the layout for this fragment
    View rootView = inflater.inflate(R.layout.fragment_blank, container, false);

    RecyclerView rv = (RecyclerView) rootView.findViewById(R.id.rv_recycler_view);
    rv.setHasFixedSize(true);
    MyAdapter adapter = new MyAdapter(new String[]{"League One News", "AFC Wimbledon", "Blackburn Rovers", "Blackpool", "Bradford City", "Bristol Rovers", "Bury", "Charlton Athletic", "Doncaster Rovers", "Fleetwood Town",
            "Gillingham", "Milton Keynes Dons", "Northampton Town", "Oldham Athletic", "Oxford United", "Peterborough United", "Plymouth Argyle", "Portsmouth", "Rochdale", "Rotherham United",
            "Scunthorpe United", "Shrewsbury Town", "Southend United", "Walsall", "Wigan Athletic"});
    rv.setAdapter(adapter);

    LinearLayoutManager llm = new LinearLayoutManager(getActivity());
    rv.setLayoutManager(llm);

    return rootView;
}

public void onListItemClick(ListView l, View v, int position, long id) {
    if (position == 3) {
        Intent intent = new Intent(getContext(), Bradford.class);
        startActivity(intent);
    }

我的适配器类

公共类 MyAdapter 扩展 RecyclerView.Adapter {

private String[] mDataset;

public static class MyViewHolder extends RecyclerView.ViewHolder{
    public CardView mCardView;
    public TextView mTextView;
    public MyViewHolder(View v){
        super(v);

        mCardView = (CardView) v.findViewById(R.id.card_view);
        mTextView = (TextView) v.findViewById(R.id.tv_text);

    }

}

public MyAdapter(String[] myDataset){
    mDataset = myDataset;
}

@Override
public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false);
    MyViewHolder vh = new MyViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position){
    holder.mTextView.setText(mDataset[position]);
}

@Override
public int getItemCount() { return mDataset.length; }

}

【问题讨论】:

  • 你的“onListItemClick”方法在哪里使用?
  • 这里你可以找到如何使用 RecyclerView 定义“onClickListener”stackoverflow.com/questions/24471109/recyclerview-onclick
  • 如果您想在回收站视图项上放置点击侦听器,那么您应该在 MyAdapter 类中执行此操作。如果是这种情况,请发布 M¥Adapter 类。
  • @AalapPatel 我已经添加了适配器类

标签: java android android-fragments android-intent


【解决方案1】:

这对我来说很完美。

1)在viewholder类中创建方法,该方法将获取位置,从位置获取数组项并使用您喜欢的方式。

2) 在 onBindViewHolder 方法中使用 itemView 实例访问它,该实例是给定位置的完整行,

public class MyAdapter extends RecyclerView.Adapter {

     private String[] mDataset;


public MyAdapter(String[] myDataset){
mDataset = myDataset;
}

 @Override
 public MyAdapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
    View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_item, parent, false);
    MyViewHolder vh = new MyViewHolder(v);
    return vh;
}

@Override
public void onBindViewHolder(MyViewHolder holder, int position){
    holder.mTextView.setText(mDataset[position]);
    holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                holder.bindCliks(groupItem);
            }
        });

@Override 
public int getItemCount() { return mDataset.length; }
}



public static class MyViewHolder extends RecyclerView.ViewHolder{
     public CardView mCardView;
     public TextView mTextView;

     public MyViewHolder(View v){
          super(v);

          mCardView = (CardView) v.findViewById(R.id.card_view);
          mTextView = (TextView) v.findViewById(R.id.tv_text);
     }


    public void bindCliks(int position) {
        Intent intent = new Intent(context, 
            OtherActivity.class);
       //use number here to get your string item and use it to other activity.
        context.startActivity(intent);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    • 1970-01-01
    • 2016-07-23
    相关资源
    最近更新 更多