Android on activity结果总是返回0和null intent

时间:2013-08-29 09:26:50

标签: android onactivityresult

我尝试了从网上找到的几乎所有解决方案,仍然无法解决我的问题。有人请帮忙解决以下问题吗?我真的无法让它发挥作用。即使我试图将setresult代码放在onBackPressed事件中,父活动仍然得到结果代码= 0.

  1. 在微调器的触摸事件中为父[CreatePostActivity]启动结果活动:
  2. @覆盖

    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
            mContext = this;
            appState = ((ApplicationProvider) getApplicationContext());
    
        LayoutInflater inflate = LayoutInflater.from(this);
        mContent = inflate.inflate(R.layout.activity_create_post, null);
        setContentView(mContent);
    
        spinnerCategory = (Spinner) mContent.findViewById(R.id.spinnerCategory);
        spinnerCategory.setOnTouchListener(this);
    
        arrayCategory = new String[] { getResources().getString(R.string.create_post_category) };
        adapterCategory = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, arrayCategory);
        spinnerCategory.setAdapter(adapterCategory);}
    
    
    @Override
    public boolean onTouch(View v, MotionEvent event) {
    
        if (v.getId() == R.id.spinnerCategory) {
            Bundle bundle = new Bundle();
            bundle.putInt("CategoryId", categoryId);
            Intent intent = new Intent(this, CreatePostActivity_Category.class);
            intent.putExtras(bundle);
            // intent.setFlags(intent.FLAG_ACTIVITY_CLEAR_TOP);
            startActivityForResult(intent, Variables.CREATEPOST_CATEGORY_ACTIVITY_REQUEST_CODE);
        }
        return true;
    }
    
    1. 子[CreatePostActivity_Category]包含一个列表视图,并使用以下适配器进行初始化:
    2. listitem_select_checkbox.xml

      <?xml version="1.0" encoding="utf-8"?>
      <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:background="@color/white"
          android:padding="5dp" >
      
          <TextView
              android:id="@+id/textViewItem"
              style="@style/Heading.h2"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_centerVertical="true"
              android:text="TextView" />
      
          <CheckBox
              android:id="@+id/checkBoxItem"
              android:layout_width="wrap_content"
              android:layout_height="wrap_content"
              android:layout_alignParentRight="true"
              android:layout_centerVertical="true" />
      
      </RelativeLayout>
      

      CreatePostActivity接收:

      @Override
      protected void onActivityResult(int requestCode, int resultCode, Intent data) {
          if (requestCode == Variables.CREATEPOST_CATEGORY_ACTIVITY_REQUEST_CODE) {
              if (resultCode == RESULT_OK) {
                  System.out.println("OK");
              } else
                  System.out.println("CANCEL");
          }
      }
      

      CreatePostActivity_Category:

      public class CategoryAdapter extends BaseAdapter implements OnCheckedChangeListener {
          private LayoutInflater inflater = null;
      
          public CategoryAdapter(CategoryModel[] list) {
              inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
          }
      
          @Override
          public int getCount() {
              return mListItems.length;
          }
      
          @Override
          public Object getItem(int position) {
              return position;
          }
      
          @Override
          public long getItemId(int position) {
              return position;
          }
      
          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
              View vi = convertView;
              if (convertView == null)
                  vi = inflater.inflate(R.layout.listitem_select_checkbox, null);
      
              TextView textViewItem = (TextView) vi.findViewById(R.id.textViewItem);
              textViewItem.setText(mListItems[position].getDescription((String) appState.getPreference(Variables.PREF_LANG)));
      
              CheckBox checkBoxItem = (CheckBox) vi.findViewById(R.id.checkBoxItem);
              if (categoryId == mListItems[position].CategoryId)
                  checkBoxItem.setChecked(true);
              checkBoxItem.setTag(R.id.tag_id, mListItems[position].CategoryId);
              checkBoxItem.setTag(R.id.tag_desc, mListItems[position].getDescription((String) appState.getPreference(Variables.PREF_LANG)));
              checkBoxItem.setOnCheckedChangeListener(this);
      
              return vi;
          }
      
          @Override
          public void onCheckedChanged(CompoundButton v, boolean isChecked) {
              if (isChecked) {
                  int id = Integer.parseInt(((CompoundButton) v).getTag(R.id.tag_id).toString());
                  String desc = ((CompoundButton) v).getTag(R.id.tag_desc).toString();
      
                  Bundle bundle = new Bundle();
                  bundle.putInt("CategoryId", id);
                  bundle.putString("Category", desc);
                  Intent mIntent = new Intent();
                  mIntent.putExtras(bundle);
      
                  if (getParent() == null) {
                      setResult(Activity.RESULT_OK, mIntent);
                  } else {
                      getParent().setResult(Activity.RESULT_OK, mIntent);
                  }
                  finish();
              }
          }
      }
      
      
      
      @Override
      protected void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
      
          mContext = this;
          appState = ((ApplicationProvider) getApplicationContext());
          database = DatabaseHelper.instance();
      
          LayoutInflater inflate = LayoutInflater.from(this);
          mContent = inflate.inflate(R.layout.activity_create_post_category, null);
          setContentView(mContent);
      
          ImageButton ibtnClose = (ImageButton) mContent.findViewById(R.id.ibtnClose);
          ibtnClose.setOnClickListener(new OnClickListener() {
              public void onClick(View v) {
                  finish();
              }
          });
      
          listViewCategory = (ListView) mContent.findViewById(R.id.listViewCategory);
          Cursor cr = database.select("SELECT category_id, edesc, cdesc FROM category");
          mListItems = new CategoryModel[cr.getCount()];
      
          if (cr != null) {
              if (cr.moveToFirst()) {
                  int i = 0;
                  do {
                      int categoryId = cr.getInt(cr.getColumnIndex("category_id"));
                      String cdesc = cr.getString(cr.getColumnIndex("cdesc"));
                      String edesc = cr.getString(cr.getColumnIndex("edesc"));
                      mListItems[i] = new CategoryModel(categoryId, cdesc, edesc);
                      i++;
                  } while (cr.moveToNext());
              }
          }
          cr.close();
      
          CategoryAdapter mCategoryAdapter = new CategoryAdapter(mContext, mListItems);
          listViewCategory.setAdapter(mCategoryAdapter);
      
          mData = this.getIntent().getExtras();
          categoryId = mData.getInt("CategoryId");
      }
      

2 个答案:

答案 0 :(得分:1)

在您的子活动中调用finish()方法之前,请添加以下代码:

setResult(RESULT_OK);

Fllowing是新的: 1,添加新变量:

Context mContext;

2,更改适配器构造函数:

public CategoryAdapter(Context context,CategoryModel[] list) {
    mContext = context;
    inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}

3,将适配器中的finish()更改为:

((Activity)mContext).finish();

4,使用步骤2中提到的结构替换父活动中的适配器定义

答案 1 :(得分:0)

最后我想出来了!!!

我写的原始触摸侦听器已被触发三次,这就是为什么它无法检索实际的返回结果。

由此解决 - &gt; Setting a spinner onClickListener() in Android

private View.OnTouchListener Spinner_OnTouch = new View.OnTouchListener() {
    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {

            if (v.getId() == R.id.spinnerCategory) {
                Bundle bundle = new Bundle();
                bundle.putInt("CategoryId", categoryId);
                Intent intent = new Intent(mContext, CreatePostActivity_Category.class);
                intent.putExtras(bundle);
                startActivityForResult(intent, Variables.CREATEPOST_CATEGORY_ACTIVITY_REQUEST_CODE);
            }
        }
        return true;
    }
};

一切正常。 感谢所有建议和正确的答案。