0

ネットで見つけたほとんどすべての解決策を試しましたが、まだ問題を解決できません。誰か次のコードを手伝ってくれませんか? 私は本当にそれを機能させることはできません。setresult コードを onBackPressed イベントに入れようとしても、親アクティビティはまだ結果コード = 0 を取得します。

  1. スピナーのタッチ イベントで親 [CreatePostActivity] の結果のアクティビティを開始します。

@オーバーライド

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] ​​にはリストビューが含まれ、以下のようなアダプターで初期化されます。

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");
}
4

2 に答える 2

1

子アクティビティで finish() メソッドを呼び出す前に、次のコードを追加します。

setResult(RESULT_OK);

Flowing は新しい: 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 で説明した構造に置き換えます。

于 2013-08-29T09:30:33.687 に答える
0

やっとわかった!!!

私が書いたオリジナルの on touch リスナーは 3 回起動されたため、実際の戻り値を取得できませんでした。

これで解決 --> Android でスピナー onClickListener() を設定する

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;
    }
};

すべてが機能します。提案された正しい答えをありがとう。

于 2013-08-30T02:13:43.030 に答える