如何在 RecyclerView 中实现 StartActivityForResult

     2023-02-19     53

关键词:

【中文标题】如何在 RecyclerView 中实现 StartActivityForResult【英文标题】:How to implement StartActivityForResult in RecyclerView 【发布时间】:2018-07-19 16:07:21 【问题描述】:

我正在尝试在我的 RecyclerView 中使用 startActivityForResult 并且不知道如何...尝试了这种方式,我从 Activity 获得了 NullPointExeption,有什么办法可以解决它。

这是活动:

    RecyclerView recyclerView=findViewById(R.id.todo_Recyclerview);
    Todo_Adapter adapter=new Todo_Adapter(this,Todo_DataGenerator.getData(this));
    recyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
    recyclerView.setAdapter(adapter);


TextView title=findViewById(R.id.todo_txt_Titleitem);
TextView content=findViewById(R.id.todo_txt_Contentitem);


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    super.onActivityResult(requestCode, resultCode, data);


    if (requestCode== Request &&
            resultCode==RESULT_OK &&
            data !=null)

        String Title=data.getStringExtra(Todo_saveActivity.Todo_Title);
        String Content=data.getStringExtra(Todo_saveActivity.Todo_Content);

        title.setText(Title);
        content.setText(Content);

这是适配器:

public class Todo_Adapter extends RecyclerView.Adapter<Todo_Adapter.Todo_itemViewHolder> 
public static final int Request = 1002;

private Context context;
private List<Todo_SampleClass> Notes;



public Todo_Adapter(Context context, List<Todo_SampleClass> Notes) 

    this.context = context;
    this.Notes = Notes;



@Override
public Todo_itemViewHolder onCreateViewHolder(ViewGroup parent, int viewType) 
    LayoutInflater layoutInflater = LayoutInflater.from(context);
    View view = layoutInflater.inflate(R.layout.todo_rv_item, parent, false);
    return new Todo_itemViewHolder(view);




@Override
public void onBindViewHolder(Todo_itemViewHolder holder, int position) 
    holder.bindNotes(Notes.get(position));
    holder.Add.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            Intent intent=new Intent(context, Todo_saveActivity.class);
            ((Activity) context).startActivityForResult(intent,Request);

        
    );




@Override
public int getItemCount() 
    return Notes.size();


public class Todo_itemViewHolder extends RecyclerView.ViewHolder 

    private TextView Title;
    private TextView Content;
    private ImageButton edit;
    private ImageButton remove;
    private Button Add;

    public Todo_itemViewHolder(View itemView) 
        super(itemView);
        Title = itemView.findViewById(R.id.todo_txt_Titleitem);
        Content = itemView.findViewById(R.id.todo_txt_Contentitem);
        edit = itemView.findViewById(R.id.todo_btn_edit);
        remove = itemView.findViewById(R.id.todo_btn_remove);
        Add = itemView.findViewById(R.id.todo_btn_add);

    


    public void bindNotes(Todo_SampleClass Notes) 
        Title.setText(Notes.getTitle());
        Content.setText(Notes.getContent());
        edit.setImageDrawable(Notes.getImgbtn_edit());

        remove.setImageDrawable(Notes.getImgbtn_remove());
    

    


这是我要参加的第二个活动:

public class Todo_saveActivity extends AppCompatActivity 


public static final String Todo_Title ="result";
public static final String Todo_Content="content";
@Override
protected void onCreate(Bundle savedInstanceState) 
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_todo_save);


    final EditText Title=findViewById(R.id.todo_name);
   final EditText Content=findViewById(R.id.todo_family);

这是 logcat:

  java.lang.RuntimeException: Unable to instantiate activity ComponentInfocom.example.expert2.expert2/com.example.expert2.expert2.rv_Todo.Todo_rv: java.lang.NullPointerException
                  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2137)
                  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2261)
                  at android.app.ActivityThread.access$600(ActivityThread.java:141)
                  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1256)
                  at android.os.Handler.dispatchMessage(Handler.java:99)
                  at android.os.Looper.loop(Looper.java:137)
                  at android.app.ActivityThread.main(ActivityThread.java:5103)
                  at java.lang.reflect.Method.invokeNative(Native Method)
                  at java.lang.reflect.Method.invoke(Method.java:525)
                  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
                  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                  at dalvik.system.NativeStart.main(Native Method)
               Caused by: java.lang.NullPointerException
                  at android.support.v7.app.AppCompatDelegateImplBase.<init>(AppCompatDelegateImplBase.java:117)
                  at android.support.v7.app.AppCompatDelegateImplV9.<init>(AppCompatDelegateImplV9.java:149)
                  at android.support.v7.app.AppCompatDelegateImplV11.<init>(AppCompatDelegateImplV11.java:29)
                  at android.support.v7.app.AppCompatDelegateImplV14.<init>(AppCompatDelegateImplV14.java:54)
                  at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:202)
                  at android.support.v7.app.AppCompatDelegate.create(AppCompatDelegate.java:183)
                  at android.support.v7.app.AppCompatActivity.getDelegate(AppCompatActivity.java:519)
                  at android.support.v7.app.AppCompatActivity.findViewById(AppCompatActivity.java:190)
                  at com.example.expert2.expert2.rv_Todo.Todo_rv.<init>(Todo_rv.java:29)
                  at java.lang.Class.newInstanceImpl(Native Method)
                  at java.lang.Class.newInstance(Class.java:1130)
                  at android.app.Instrumentation.newActivity(Instrumentation.java:1061)

谢谢。---------------------------------------------- ---------------------

【问题讨论】:

在你的适配器中,你从哪里得到变量context 【参考方案1】:

查看这段代码时:

public static final int Request = 1002;

 @Override
public void onBindViewHolder(Todo_itemViewHolder holder, int position) 
    holder.bindNotes(Notes.get(position));
    holder.Add.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View v) 
            Intent intent=new Intent(context, Todo_saveActivity.class);
            ((Activity) context).startActivityForResult(intent,Request);

        
    );


在我看来,((活动)上下文)似乎是问题所在。您正在尝试使用为空的 Activity 对象调用 startActivityForResult(...) 。根据您的 RecyclerView 是在 Activity 中还是在 Fragment 中,请确保您将 context 设置为等于父 Activity 上下文的有效实例,例如:

Context context = getContext(); //if in fragment
Context context = (Context)this; //if in parent activity

然后你应该可以打电话了

((Activity) context).startActivityForResult(intent,Request);

没有任何问题。

【讨论】:

谢谢...家长活动你的意思是第一个活动?我的 RecyclerView 是活动,但不是第一个......我应该在哪里添加? 如果您使用的是片段,则父活动是片段所在的活动。【参考方案2】:

如果您愿意使用回调来执行此操作,而不是直接在您的活动中执行此操作...

创建一个这样的界面:

public interface OnBindCallback 
    void onViewBound(Todo_itemViewHolder viewHolder, int position);

然后,在您的适配器中:

public OnBindCallback onBind;

@Override public void onBindViewHolder(Todo_itemViewHolder holder, int position) 
    if (onBind != null) 
        onBind.onViewBound(holder, position);
    

最后,在你的活动中:

adapter.onBind = (viewHolder, position) -> 
    viewHolder.itemView.setOnClickListener(new View.OnClickListener() 
        @Override
        public void onClick(View view) 
            Intent intent=new Intent(YourActivityName.this, Todo_saveActivity.class);
            YourActivityName.this.startActivityForResult(intent, 1002);
        
    );
;

【讨论】:

如何在基于 SQLite 的 recyclerview 中实现 searchview? - 安卓

】如何在基于SQLite的recyclerview中实现searchview?-安卓【英文标题】:HowtoimplementsearchviewinrecyclerviewwhichbasedonSQLite?-Android【发布时间】:2021-11-0506:45:11【问题描述】:我正在构建Android应用程序,它将患者详细信息存储在SQLite数据库... 查看详情

从片段中获取意图值后,我如何在 recyclerview 项目中实现单击

】从片段中获取意图值后,我如何在recyclerview项目中实现单击【英文标题】:Aftergettingintentvaluefromfragmenthowcaniimplementinrecyclerviewitemclick【发布时间】:2021-12-3009:37:05【问题描述】:我在recyclerviewitemclick中设置了一个按钮,单击按... 查看详情

如何使用 Kotlin 在 RecyclerView Adapter 中实现 onClick 并进行数据绑定

】如何使用Kotlin在RecyclerViewAdapter中实现onClick并进行数据绑定【英文标题】:HowtoimplementonClickinRecyclerViewAdapterwithdatabindingusingKotlin【发布时间】:2021-07-0707:40:38【问题描述】:我使用数据绑定创建了一个RecyclerView适配器,我正在... 查看详情

如何在 RecyclerView 的 CardView 中实现对 Item Click 的操作以显示结果

】如何在RecyclerView的CardView中实现对ItemClick的操作以显示结果【英文标题】:HowtoimplementanActiononItemClickinOrdertoshowtheresultinCardViewofRecyclerView【发布时间】:2020-08-2711:24:18【问题描述】:我对Android编程非常陌生。我找不到解决我几... 查看详情

在 recyclerview 片段中实现上下文操作模式的问题

】在recyclerview片段中实现上下文操作模式的问题【英文标题】:Problemswithimplementingcontextualactionmodeinrecyclerviewfragment【发布时间】:2015-08-2903:24:14【问题描述】:我从一堆教程中破解了我的第一个应用程序。在其中一个的帮助下,... 查看详情

在 recyclerview 中实现 facebook 横幅广告

】在recyclerview中实现facebook横幅广告【英文标题】:Implementfacebookbanneradsinrecyclerview【发布时间】:2020-07-2206:15:47【问题描述】:我正在尝试在recyclerview的第三个位置实施Facebook横幅广告(不是原生横幅)。我创建了一个具有广告... 查看详情

在 RecyclerView 的适配器中实现的 OnClickListener 不起作用

】在RecyclerView的适配器中实现的OnClickListener不起作用【英文标题】:OnClickListenerimplementedinAdapterofRecyclerViewnotworking【发布时间】:2021-04-2108:41:27【问题描述】:我已经为RecyclerView实现了以下适配器。我还包含了处理RecyclerView项目... 查看详情

使用嵌入式原生广告在 recyclerview 中实现搜索

】使用嵌入式原生广告在recyclerview中实现搜索【英文标题】:implementsearchinrecyclerviewwithembeddednativeads【发布时间】:2020-12-2206:01:20【问题描述】:我想在回收站视图中实现搜索,在该视图中我使用Object作为List中的类,因为我在其... 查看详情

kotlin中实现recyclerview嵌套recyclerview

实现如图的功能: 1、添加Gson依赖implementation\'com.google.code.gson:gson:2.8.7\' 使用 viewBinding,在build.gradle中 android下配置如下//AndroidStudio3.6androidviewBindingenabled=true//AndroidStudio4. 查看详情

使用 Recycler View 时如何在 Text To Speech 中实现错误处理

】使用RecyclerView时如何在TextToSpeech中实现错误处理【英文标题】:HowtoImplementErrorhandlinginTextToSpeechwhileworkingwithRecyclerView【发布时间】:2021-12-2600:18:11【问题描述】:我将TextToSpeech从Fragment传递到我的RecyclerView适配器。在传递的同... 查看详情

在我的 recyclerview 适配器类中实现 Android 底页

】在我的recyclerview适配器类中实现Android底页【英文标题】:ImplementAndroidbottomsheetinmyrecyclerviewadapterclass【发布时间】:2016-06-1803:02:08【问题描述】:我想在我的Recyclerview适配器类的Onlongclick中实现android底部工作表,但我试图长按... 查看详情

在 UICollectionViewCell 中实现 UIStackView

】在UICollectionViewCell中实现UIStackView【英文标题】:ImplementingUIStackViewinsideUICollectionViewCell【发布时间】:2018-06-2614:22:49【问题描述】:我正在尝试使用half.png和full.png这两个图像在collectionview上显示用户评分,如下所示。但即使我... 查看详情

在鸿蒙中实现类似瀑布流效果

...DK中对于长列表的实现ListContainer的实现较为简单,没法想RecyclerView一样通过使用不同的LayoutManager来实现复杂布局因此没法快速实现瀑布流效果。  但鸿蒙OS也都支持控件的Measure(onEstimateSize),layout(onArrange)和事件的处理。... 查看详情

在 recyclerview kotlin 上实现搜索的问题

】在recyclerviewkotlin上实现搜索的问题【英文标题】:Issuesimplementingsearchonrecycleviewkotlin【发布时间】:2020-04-0105:58:15【问题描述】:我正在尝试在recyclerview中实现搜索选项。到目前为止我已经实现的是:创建了如下搜索栏:我在Ma... 查看详情

如何使用 RecyclerView 构建水平 ListView

】如何使用RecyclerView构建水平ListView【英文标题】:HowtobuildahorizontalListViewwithRecyclerView【发布时间】:2015-04-1204:12:18【问题描述】:我需要在我的Android应用程序中实现一个水平列表视图。我做了一些研究,发现了HowcanImakeahorizonta... 查看详情

如何使用 TabLayout 在 Fragment 中使用 CardView 行实现 RecyclerView

】如何使用TabLayout在Fragment中使用CardView行实现RecyclerView【英文标题】:HowtoimplementRecyclerViewwithCardViewrowsinaFragmentwithTabLayout【发布时间】:2016-01-0317:49:19【问题描述】:我想在一个使用TabLayout的Activity中实现一个ListFragment,这样我... 查看详情

如何使用 JSON API 在滚动时在 recyclerview 中加载更多数据

】如何使用JSONAPI在滚动时在recyclerview中加载更多数据【英文标题】:HowtoloadmoredatainrecyclerviewonscrollusingJSONAPI【发布时间】:2021-08-2904:55:37【问题描述】:我正在滚动的recyclerview中实现分页。我正在从JSONAPI获取数据。下面是片段... 查看详情

Recyclerview 和方向键导航

】Recyclerview和方向键导航【英文标题】:RecyclerviewandD-padnavigation【发布时间】:2016-08-2114:50:30【问题描述】:我正在开发一个需要在RecyclerView中使用方向键导航的应用。我的问题是,虽然我在items.xml(news_items)中设置了android:focusab... 查看详情