我尝试了从网上找到的几乎所有解决方案,仍然无法解决我的问题。有人请帮忙解决以下问题吗?我真的无法让它发挥作用。即使我试图将setresult代码放在onBackPressed事件中,父活动仍然得到结果代码= 0.
@覆盖
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;
}
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");
}
答案 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;
}
};
一切正常。 感谢所有建议和正确的答案。