【问题标题】:ListView Adapter setResult() and Finish() errorListView 适配器 setResult() 和 Finish() 错误
【发布时间】:2016-10-09 11:27:07
【问题描述】:

我想通过使用 startActivityForResult() 方法为 Result 启动Activity。现在开始的活动有一个带有适配器类的列表视图。我写了以下列表视图适配器,所以当用户选择任何项目时,它应该返回调用活动带有选定的项目名称。我无法调用 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();

        }
    });

【问题讨论】:

    标签: android listview baseadapter


    【解决方案1】:

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

    将 Activity 对象添加到适配器构造函数并将其保存在适配器的局部变量中并调用它 act 然后调用 activtiy 的 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();
    
        }
    });
    

    【讨论】:

    • 我尝试使用活动的上下文但它不起作用,如何传递活动的引用
    【解决方案2】:

    你需要override方法protected void onActivityResult(int requestCode, int resultCode, intent data你需要返回的活动,即你调用startActivityforResult()的活动。

      @override
        protected void onActivityResult(int requestCode, int resultCode, intent data){
        if(resultCode == -1) // -1 for RESULT_OK
        { // your logic goes here...
        }
        }
    

    【讨论】:

      【解决方案3】:

      Activity对象和Context对象是有区别的(如果有混淆最好阅读文档更好理解)所以,答案很简单,

      当你想做一个基于活动的操作时,像这样操作

      Activity activity = this; 
      Context context = ActivityName.this;
      

      传递适配器中的两个对象,然后使用

      activity.setResult(Activity.RESULT_OK,intent); 
      activity.finish();
      

      对于基于上下文的操作,使用 Intent i = new Intent(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;
          }
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-08-28
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多