Android ListView适配器setResult()和Finish()错误

Android ListView适配器setResult()和Finish()错误,android,listview,baseadapter,Android,Listview,Baseadapter,我想使用startActivityForResult()方法为结果启动Tactivity。现在开始的活动有一个带有适配器类的listview。我在listview适配器后编写了一个wriiten,因此当用户选择任何项目时,它应该返回到调用具有所选项目名称的活动。我无法调用2个方法 setResult() and finish() in following code 适配器代码: view.setOnClickListener(new OnClickListener() { @

我想使用startActivityForResult()方法为结果启动Tactivity。现在开始的活动有一个带有适配器类的listview。我在listview适配器后编写了一个wriiten,因此当用户选择任何项目时,它应该返回到调用具有所选项目名称的活动。我无法调用2个方法

setResult() and finish() in following code
适配器代码:

view.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View arg0) {
            SharedPreferences prefernces = mContext.getSharedPreferences("MyKey111", Context.MODE_PRIVATE);
            SharedPreferences.Editor editor1 = prefernces.edit();
            editor1.putString("Custname",customerpopulationlist.get(position).getName());
            editor1.putString("let_id", customerpopulationlist.get(position).getLetId());
            editor1.commit();

            Intent intentMessage = new Intent();

            // put the message in Intent
            intentMessage.putExtra("MESSAGE", "hello");
            intentMessage.putExtra("selected_refer", customerpopulationlist.get(position).getLetId());

            setResult(RESULT_OK, intentMessage);
            finish();

        }
    });

您必须持有对创建适配器的活动的引用,然后将结果设置为该引用。您正在做的事情是设置OnClickListener对象的结果

将活动对象添加到适配器构造函数中,并将其保存在适配器中的局部变量中,调用它act,然后调用activityy的setResult(),如下所示:

view.setOnClickListener(new OnClickListener() {

    @Override
    public void onClick(View arg0) {
        SharedPreferences prefernces = mContext.getSharedPreferences("MyKey111", Context.MODE_PRIVATE);
        SharedPreferences.Editor editor1 = prefernces.edit();
        editor1.putString("Custname",customerpopulationlist.get(position).getName());
        editor1.putString("let_id", customerpopulationlist.get(position).getLetId());
        editor1.commit();

        Intent intentMessage = new Intent();

        // put the message in Intent
        intentMessage.putExtra("MESSAGE", "hello");
        intentMessage.putExtra("selected_refer", customerpopulationlist.get(position).getLetId());

        //THESE TWO LINES NEED TO BE CHANGED
        act.setResult(RESULT_OK, intentMessage);
        act.finish();

    }
});

您需要对需要返回的活动,即调用了
startActivityforResult()
的活动,重写
method
protectedvoid-onActivityResult(int-requestCode,int-resultCode,intent-data


活动对象和上下文对象之间存在差异(如果有混淆,最好阅读文档以便更好地理解),因此答案很简单

当您想要执行基于活动的操作时,请遵循以下步骤

Activity activity = this; 
Context context = ActivityName.this;
在适配器中传递这两个对象,然后使用

activity.setResult(Activity.RESULT_OK,intent); 
activity.finish();
对于基于上下文的操作,使用Intent i=newintent(ListViewAdapter.this.mContext、EventPrivacyAndTicketPrice.class)

请参阅下面的完整活动代码:

    public class ActivityX extends AppCompatActivity {
Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_x);
        intent = getIntent();
        ListView listView = findViewById(R.id.list_x);
        ArrayList<ETypeObject> allTypes= new ArrayList<>();
        allTypes = GetData();

        ListViewAdapter listViewAdapter= new       ListViewAdapter(allTypes,ActivityX.this,intent,this);
        listView.setAdapter(listViewAdapter);

    }

    public ArrayList<ETypeObject> GetData(){
        ArrayList<ETypeObject> allTypes= new ArrayList<>();
        allTypes.add(new ETypeObject("Object1",0));
        allTypes.add(new ETypeObject("Object2, Talk",0));
        allTypes.add(new ETypeObject("Object3",0));

   return allTypes;
    }


}

class ETypeObject {
   public String name;
    public int imageId;

    public ETypeObject(String name, int imageId) {
        this.name = name;
        this.imageId = imageId;
    }

    public ETypeObject() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }
}




 class ListViewAdapter extends BaseAdapter{
    Activity activity;
    Context mContext;
    ArrayList<ETypeObject> allTypes= new ArrayList<>();
    Intent intent;
    public ListViewAdapter(){}

    public ListViewAdapter(ArrayList<ETypeObject> AllTypes, Context context,Intent intent,Activity activity){
        mContext = context;
        allTypes = AllTypes;
        activity =activity;
        this.intent = intent;

    }



    @Override
    public int getCount() {
        return allTypes.size();
    }

    @Override
    public Object getItem(int i) {
        return allTypes.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i1, View view, ViewGroup viewGroup) {

        LayoutInflater layoutInflater= (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (layoutInflater!=null){
            view = layoutInflater.inflate(R.layout.lay1,null);

        }

        TextView type;


        type = view.findViewById(R.id.parentInteresttext);

        type.setText(allTypes.get(i1).getName());

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               // Toast.makeText(mContext,allTypes.get(i1).getName(),Toast.LENGTH_LONG).show();

                if (intent.getBooleanExtra("fromThirdActivty",false)){

                    Intent i = new Intent();
                    i.putExtra("eventType",allTypes.get(i1).getName());
                    activity.setResult(Activity.RESULT_OK,intent);
                    activity.finish();

                }


                Intent i = new Intent( ListViewAdapter.this.mContext,OtherActivity.class);

                i.putExtra("eventType",allTypes.get(i1).getName());
                ListViewAdapter.this.mContext.startActivity(i);
            }
        });
        return view;
    }
}
公共类ActivityX扩展了AppCompativeActivity{
意图;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_x);
intent=getIntent();
ListView ListView=findViewById(R.id.list_x);
ArrayList allTypes=新的ArrayList();
allTypes=GetData();
ListViewAdapter ListViewAdapter=新的ListViewAdapter(所有类型,ActivityX.this,intent,this);
setAdapter(listViewAdapter);
}
公共ArrayList GetData(){
ArrayList allTypes=新的ArrayList();
添加(新的ETypeObject(“Object1”,0));
添加(新的ETypeObject(“Object2,Talk”,0));
添加(新的ETypeObject(“Object3”,0));
返回所有类型;
}
}
类ETypeObject{
公共字符串名称;
公共int-imageId;
公共ETypeObject(字符串名称,int-imageId){
this.name=名称;
this.imageId=imageId;
}
公共ETypeObject(){
}
公共字符串getName(){
返回名称;
}
公共void集合名(字符串名){
this.name=名称;
}
public int getImageId(){
返回imageId;
}
公共无效setImageId(int-imageId){
this.imageId=imageId;
}
}
类ListViewAdapter扩展了BaseAdapter{
活动;
语境;
ArrayList allTypes=新的ArrayList();
意图;
公共ListViewAdapter(){}
公共ListViewAdapter(ArrayList所有类型、上下文、意图、活动){
mContext=上下文;
所有类型=所有类型;
活动=活动;
本意=本意;
}
@凌驾
public int getCount(){
返回allTypes.size();
}
@凌驾
公共对象getItem(int i){
返回allTypes.get(i);
}
@凌驾
公共长getItemId(int i){
返回i;
}
@凌驾
公共视图getView(int i1,视图视图,视图组视图组){
LayoutInflater LayoutInflater=(LayoutInflater)mContext.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);
if(layoutInflater!=null){
视图=LayoutFlater.充气(R.layout.lay1,空);
}
文本视图类型;
type=view.findViewById(R.id.parentInteresttext);
type.setText(allTypes.get(i1.getName());
view.setOnClickListener(新的view.OnClickListener(){
@凌驾
公共void onClick(视图){
//Toast.makeText(mContext,allTypes.get(i1).getName(),Toast.LENGTH\u LONG.show();
if(intent.getBooleanExtra(“fromThirthDactivity”,false)){
意图i=新意图();
i、 putExtra(“eventType”,allTypes.get(i1.getName());
activity.setResult(activity.RESULT_OK,intent);
activity.finish();
}
Intent i=新的Intent(ListViewAdapter.this.mContext,OtherActivity.class);
i、 putExtra(“eventType”,allTypes.get(i1.getName());
ListViewAdapter.this.mContext.startActivity(i);
}
});
返回视图;
}
}

我尝试使用活动的上下文,但它不起作用,如何传递活动的引用
    public class ActivityX extends AppCompatActivity {
Intent intent;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_x);
        intent = getIntent();
        ListView listView = findViewById(R.id.list_x);
        ArrayList<ETypeObject> allTypes= new ArrayList<>();
        allTypes = GetData();

        ListViewAdapter listViewAdapter= new       ListViewAdapter(allTypes,ActivityX.this,intent,this);
        listView.setAdapter(listViewAdapter);

    }

    public ArrayList<ETypeObject> GetData(){
        ArrayList<ETypeObject> allTypes= new ArrayList<>();
        allTypes.add(new ETypeObject("Object1",0));
        allTypes.add(new ETypeObject("Object2, Talk",0));
        allTypes.add(new ETypeObject("Object3",0));

   return allTypes;
    }


}

class ETypeObject {
   public String name;
    public int imageId;

    public ETypeObject(String name, int imageId) {
        this.name = name;
        this.imageId = imageId;
    }

    public ETypeObject() {
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getImageId() {
        return imageId;
    }

    public void setImageId(int imageId) {
        this.imageId = imageId;
    }
}




 class ListViewAdapter extends BaseAdapter{
    Activity activity;
    Context mContext;
    ArrayList<ETypeObject> allTypes= new ArrayList<>();
    Intent intent;
    public ListViewAdapter(){}

    public ListViewAdapter(ArrayList<ETypeObject> AllTypes, Context context,Intent intent,Activity activity){
        mContext = context;
        allTypes = AllTypes;
        activity =activity;
        this.intent = intent;

    }



    @Override
    public int getCount() {
        return allTypes.size();
    }

    @Override
    public Object getItem(int i) {
        return allTypes.get(i);
    }

    @Override
    public long getItemId(int i) {
        return i;
    }

    @Override
    public View getView(int i1, View view, ViewGroup viewGroup) {

        LayoutInflater layoutInflater= (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        if (layoutInflater!=null){
            view = layoutInflater.inflate(R.layout.lay1,null);

        }

        TextView type;


        type = view.findViewById(R.id.parentInteresttext);

        type.setText(allTypes.get(i1).getName());

        view.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               // Toast.makeText(mContext,allTypes.get(i1).getName(),Toast.LENGTH_LONG).show();

                if (intent.getBooleanExtra("fromThirdActivty",false)){

                    Intent i = new Intent();
                    i.putExtra("eventType",allTypes.get(i1).getName());
                    activity.setResult(Activity.RESULT_OK,intent);
                    activity.finish();

                }


                Intent i = new Intent( ListViewAdapter.this.mContext,OtherActivity.class);

                i.putExtra("eventType",allTypes.get(i1).getName());
                ListViewAdapter.this.mContext.startActivity(i);
            }
        });
        return view;
    }
}