سؤال

كيفية الحصول على قيمة Edittext من النشاط الفرعي؟ مع شرط أنه إذا قمت بالنقر فوق الزر "السابق" على الهاتف، فلا يوجد خطأ في النشاط الفرعي؟

هذا هو بلدي النشاط الفرعي الشفرة:

    public class SBooksSearch extends Activity {
    private EditText mTextSearch;   
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);     
        setContentView(R.layout.sbooks_search); 

        mTextSearch = (EditText)findViewById(R.id.edit_search);     
        Button searchButton = (Button)findViewById(R.id.btn_search);        

        searchButton.setOnClickListener(new View.OnClickListener(){
            public void onClick(View v){                
                Intent data = new Intent();             
                data.putExtra(SBooksDbAdapter.KEY_TITLE_RAW, mTextSearch.getText().toString());         
                setResult(RESULT_OK, data);
                finish();
            }
        });
    }   

    @Override
    protected void onSaveInstanceState(Bundle outState){
        super.onSaveInstanceState(outState);        
    }
    @Override
    protected void onPause(){
        super.onPause();

    }
    @Override
    protected void onResume(){
        super.onResume();       
    }
}

هذا هو بلدي نتيجة النشاط:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent){
super.onActivityResult(requestCode, resultCode, intent);        
switch(requestCode){
case ACTIVITY_SEARCH:
Bundle extras = getIntent().getExtras();
mTitleRaw = extras != null ? extras.getString(SBooksDbAdapter.KEY_TITLE_RAW) : null;            
     if(mTitleRaw!=null){
      Cursor cursor = mDbHelper.searchData(mTitleRaw);

    String[] from = new String[]{ SBooksDbAdapter.KEY_ROWID,
                        SBooksDbAdapter.KEY_TITLE, SBooksDbAdapter.KEY_LYRICS };
        int[] to = new int[]{ R.id.id, R.id.title, R.id.lyrics };
        SimpleCursorAdapter adapter = 
                    new SimpleCursorAdapter(this, R.layout.sbooks_row, cursor, from, to );
           setListAdapter(adapter);
            }           
           break;
        }
    }
هل كانت مفيدة؟

المحلول

بادئ ذي بدء، يجب ألا تحاول أي نوع من الإجراءات إذا كان المستخدم يضرب الزر "الخلفي". إنه زر عالمي يعني "الخروج من هنا الآن"، وعادة ما يكون من المفهوم أن المستخدم يريد شيئا آخر غير سجل شاشة واحدة تحدث نتيجة لذلك.

إذن ما عليك القيام به هو في SearchButton.SetonClickListener، في OnClick، قم بإنشاء نية فارغة مثل ذلك:

Intent data = new Intent();

ثم تحتاج إلى إضافة قيمة Edittext كقيمة إضافية، مثل ذلك:

data.putExtra(SBooksDbAdapter.KEY_TITLE_RAW, mTextSearch.getText().toString());

أخيرا، قم بتضمين هذه النية في مكالمة SetResult الخاصة بك:

setResult(RESULT_OK, data);

في onactivityResoursult، اسحب القيمة من النية وكأنك تقوم بالفعل ويجب أن تكون على ما يرام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top