সম্পাদনা পাঠ্য ফোকাস সেট করুন


177

আমার কাছে একটি এডিটেক্সট-ফিল্ড রয়েছে এবং এটির জন্য একটি অনফোকাস চ্যাঞ্জলিস্টনার সেট করব। যখন এটি ফোকাস হারিয়ে ফেলেছে, একটি পদ্ধতি বলা হয়, যা ডাটাবেসের একটিতে এডিটেক্সটের মান পরীক্ষা করে। যদি পদ্ধতির রিটার্ন-মানটি সত্য হয় তবে একটি টোস্ট দেখানো হয় এবং ফোকাসটি আবার সম্পাদনা পাঠের দিকে ফিরে পাওয়া উচিত। পদ্ধতির রিটার্ন-ভ্যালুটি মিথ্যা না হওয়া পর্যন্ত ফোকাসটি সর্বদা এডিটেক্সট এ ফিরে আসা উচিত এবং কীবোর্ডটি প্রদর্শন করা উচিত।

সম্পাদনা: আমি মনে করি, আমি এখনও আমার আসল সমস্যাটি পুরোপুরি পরিষ্কার করে দেখিনি: পর্দার অন্য কোনও আইটেম সম্পাদনা করতে সক্ষম হওয়া উচিত নয়, যতক্ষণ না সম্পাদনা পাঠ্যের মানটি কোনও মানতে সম্পাদিত হয়, যা পদ্ধতিটিকে "চেকলিগানাম (লিগনাম) করে তোলে" "মিথ্যা প্রত্যাবর্তন। শুধুমাত্র এডিটেক্সট-ফিল্ড সম্পাদনাযোগ্য হতে হবে।

এখানে আমার কোড (যা আমার পক্ষে কাজ করে না):

final EditText Liganame = (EditText) findViewById(R.id.liganame);

    Liganame.setOnFocusChangeListener(new OnFocusChangeListener() {

        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if (!hasFocus) {

                String liganame = Liganame.getText().toString();


                if (checkLiganame(liganame)) {
                    Toast toast = Toast.makeText(CreateTableActivity.this,
                            "Dieser Liganame ist bereits vergeben",
                            Toast.LENGTH_SHORT);
                    toast.show();
                    Liganame.requestFocus();
                }
            }

এবং পদ্ধতি:

public boolean checkLiganame(String liganame) {
    boolean found = false;

    DatabaseHelper databaseHelper = new DatabaseHelper(this);
    SQLiteDatabase db = databaseHelper.getReadableDatabase();

    Cursor cursor = db.query("liga", new String[] { "liganame" },
            "liganame = '" + liganame + "'", null, null, null, null);
    Log.i("Liganame: ", String.valueOf(cursor));

    db.close();
    if (cursor != null) {
        found = true;
    }

    return found;
}

এই কোডটি নিম্নলিখিত ফলাফলের দিকে নিয়ে যায়: এডিট টেক্সট ফোকাস হারিয়ে যাওয়ার পরে, ফোকাসটি এডিটেক্সটটিতে ফিরে আসে, তবে আমি আর পাঠ্য সম্পাদনা করতে পারি না।

সম্পাদনা 2: আমার কোড পরিবর্তন হয়েছে। দৃশ্যপট:

আমি প্রথম এডিটেক্সট-এ ক্লিক করেছি এবং এতে একটি স্ট্রিং রেখেছি, যা ইতিমধ্যে ডাটাবেসে রয়েছে। টোস্টটি দেখাচ্ছে। এখন আমি আমার স্ট্রিংটি আর সম্পাদনা করতে পারি না। আমি কীবোর্ডে "পরবর্তী" ক্লিক করি এবং ফোকাসটি প্রথম সম্পাদনা পাঠ্যে থাকে। আমি আমার স্ট্রিং এডিট করার চেষ্টা করি, তবে কিছুই হয় না। পরিবর্তে আমার নতুন স্ট্রিংটি দ্বিতীয় সম্পাদনা পাঠ্যে প্রদর্শিত হচ্ছে। আমি আমার ডিভাইসের পিছনের তীরটিতে ক্লিক করি এবং প্রথম এবং দ্বিতীয় সম্পাদনা পাঠ্য -> কোনও কীবোর্ড দেখানো হচ্ছে নাটিতে পুনরায় ক্লিক করুন।

আমার নতুন কোডটি এখানে:

public class CreateTableActivity extends Activity implements
    OnFocusChangeListener {

private EditText Liganame, Mannschaftsanzahl;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.create_league);

    Liganame = (EditText) findViewById(R.id.liganame);
    Liganame.setOnFocusChangeListener(this);
    Mannschaftsanzahl = (EditText) findViewById(R.id.mannschaftsanzahl);
    Mannschaftsanzahl.setOnFocusChangeListener(this);

    final Button save_button = (Button) findViewById(R.id.create_tabelle_speichern_button);

    OnClickListener mCorkyListener = new OnClickListener() {
        public void onClick(View v) {
            ButtonClick();
        }
    };
    save_button.setOnClickListener(mCorkyListener);



}

@Override
public void onFocusChange(View v, boolean hasFocus) {
    String liganame = Liganame.getText().toString();

    if (checkLiganame(liganame)) {
        if (Liganame.requestFocus()) {
            getWindow()
                    .setSoftInputMode(
                            WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            Mannschaftsanzahl.clearFocus();
            Toast.makeText(CreateTableActivity.this,
                    "Dieser Liganame ist bereits vergeben",
                    Toast.LENGTH_SHORT).show();
        }
    }
}

নীচের উত্তরগুলি যদি আপনাকে সহায়তা করা হয় তবে দয়া করে একটি উত্তর গ্রহণ করুন
অক্ষর শ্রীনিবাস

উত্তর:


277

শুধু আপনার এই লাইন রাখুন onCreate()

editText.requestFocus();

এটি আমার পক্ষে কাজ করে, আশা করি এটি সাহায্য করবে


163

কীবোর্ডটি দেখানোর জন্য ফোকাসের অনুরোধ যথেষ্ট নয়।

ফোকাস পেতে এবং কীবোর্ডটি দেখানোর জন্য আপনি এই জাতীয় কিছু লিখবেন:

if(myEditText.requestFocus()) {
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
}

সম্পাদনা: চেকলিগনেম পদ্ধতি যুক্ত হওয়ার পরে উত্তরে অতিরিক্ত তথ্য যুক্ত করা হচ্ছে।

চেকলিগনাম পদ্ধতিতে আপনি পরীক্ষা করে নিন যে কার্সারটি নাল। কার্সার সর্বদা একটি বস্তু ফেরত দেবে, সুতরাং নালটির জন্য চেক কিছু না করে। তবে সমস্যাটি লাইনের মধ্যে রয়েছেdb.close();

আপনি যখন ডাটাবেস সংযোগটি বন্ধ করেন, তখন Cursorএটি অবৈধ হয়ে যায় এবং সম্ভবত নীল হয়।

সুতরাং মানটি আনার পরে ডাটাবেসটি বন্ধ করুন।

শূন্যতার জন্য কার্সারটি পরীক্ষা করার পরিবর্তে, আপনার ফিরে আসা সারির সংখ্যা 0: এর চেয়ে বেশি কিনা তা পরীক্ষা করে দেখা উচিত: যদি (কার্সার.জেটকাউন্ট ()> 0) থাকে এবং তারপরে আপনার বুলিয়ানটিকে সত্য হিসাবে সেট করা হয়।

সম্পাদনা 2: সুতরাং এটি কীভাবে কাজ করা যায় তার জন্য কিছু কোড এখানে। সম্পাদনা 3: দুঃখিত ভুল কোড আমি যুক্ত করেছি ...; এস

প্রথমে, অন্য ফোকাস হয়ে গেলে আপনার ফোকাস সাফ করা দরকার EditText। এটি দিয়ে করা যেতে পারে myEditText.clearFocus()। তারপরে আপনার অন EditTextফোকাস চেঞ্জলাইস্টেনারে প্রথমে ফোকাস আছে কিনা তা আপনার সত্যিকারের যত্ন নেওয়া উচিত নয়, যাতে অন ফোকাস চ্যাঞ্জলিস্টনার এইরকম কিছু দেখতে পারে:

public class MainActivity extends Activity implements OnFocusChangeListener {
    private EditText editText1, editText2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText1 = (EditText) findViewById(R.id.editText1);
        editText1.setOnFocusChangeListener(this);
        editText2 = (EditText) findViewById(R.id.editText2);
        editText2.setOnFocusChangeListener(this);
    }

    @Override
    public void onFocusChange(View v, boolean hasFocus) {
        String liganame = editText1.getText().toString();

        if(liganame.length() == 0) {
            if(editText1.requestFocus()) {
                getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
                editText2.clearFocus();
                Toast.makeText(MainActivity.this, "Dieser Liganame ist bereits vergeben", Toast.LENGTH_SHORT).show();
            }
        }
    }
}

if(liganame.length() == 0)আপনার নিজের চেক দিয়ে প্রথম চেকটি প্রতিস্থাপন করুন , তারপরে এটি কাজ করা উচিত। দ্রষ্টব্য, যে সমস্ত সম্পাদনা পাঠ্য দর্শনগুলি onFocusChangeListenerউদাহরণ হিসাবে আমি যেমন করেছি তেমনই শ্রোতার কাছে সেট করা উচিত ছিল ।


আপনাকে এখন পর্যন্ত ধন্যবাদ। তবে এটি আমার পুরো সমস্যার সমাধান করে না। আমি আমার সমস্যার বর্ণনা সম্পাদনা করেছি।
এরদালপ্রিনজ

তাহলে চেকলিগনেম ঠিক কী করছে? আপনি কেবল (লিগনাম.আইএসপিটি ()) যাচাই করতে পারবেন না এবং যদি এটি সত্য হয় তবে ফোকাসের জন্য আবার অনুরোধ করবেন?
দারউইন্ড

1
আপনাকে ধন্যবাদ :-) এখন আমার পদ্ধতিটি সঠিকভাবে কাজ করছে :-) তবে সম্পাদনা-ক্ষেত্রের সাথে আমার মূল সমস্যাটি এখনও সমাধান হয়নি। পদ্ধতিটি সারি সন্ধান করার পরেও আমি এখনও এটি সম্পাদনা করতে পারি না ...
এরদালপ্রিনজ

সুতরাং আপনি যদি যোগ করেছেন (myEditText.requestFocus ()) {getWindow ()। সেটসফট ইনপুটমোড (উইন্ডোম্যানেজ.লায়আউটপ্যারামস.সফT_INPUT_STATE_ALWAYS_VISIBLE); On অন ফোকাসের পরিবর্তিত শ্রোতার ভিতরে?
দারবিন্দ

হ্যা, আমি করেছিলাম. Liganame.requestFocus এর অধীনে ();। আমি পরবর্তী এডিটেক্সট-ফিল্ডে লাফ দিতে কীবোর্ডের "পরবর্তী" টিপুন click টোস্টটি প্রদর্শিত হচ্ছে এবং ফোকাসটি দুটি সম্পাদনা পাঠ্য ক্ষেত্রগুলিতে রয়েছে। তবে আমি কেবল দ্বিতীয়টি সম্পাদনা করতে পারি। প্রথমটি, যা একমাত্র এই ক্ষেত্রে ফোকাস করা উচিত তা আর সম্পাদনযোগ্য নয়।
এরদালপ্রিনজ

59

দারউইন্ড কোড কীবোর্ডটি দেখায় নি।

এটি আমার পক্ষে কাজ করে:

        _searchText.requestFocus();
        InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.showSoftInput(_searchText, InputMethodManager.SHOW_IMPLICIT);

কীবোর্ডটি প্রদর্শিত না হচ্ছে, জোর করার চেষ্টা করুন:

        imm.showSoftInput(_searchText, InputMethodManager.SHOW_FORCED);

19

বোতামটি ক্লিক করা হলে এটি সম্পাদনা পাঠ্যের ফোকাসকে পরিবর্তন করে:

public class MainActivity extends Activity {
    private EditText e1,e2;
    private Button b1,b2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        e1=(EditText) findViewById(R.id.editText1);
        e2=(EditText) findViewById(R.id.editText2);
        e1.requestFocus();
        b1=(Button) findViewById(R.id.one);
        b2=(Button) findViewById(R.id.two);
        b1.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                e1.requestFocus();

            }
        });
        b2.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                e2.requestFocus();
            }
        });
    }
}

16

এটি আমার কাছ থেকে কাজ করে:

public void showKeyboard(final EditText ettext){
    ettext.requestFocus();
    ettext.postDelayed(new Runnable(){
            @Override public void run(){
                InputMethodManager keyboard=(InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                keyboard.showSoftInput(ettext,0);
            }
        }
        ,200);
}

আড়াল করতে:

private void hideSoftKeyboard(EditText ettext){
    InputMethodManager inputMethodManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
    inputMethodManager.hideSoftInputFromWindow(ettext.getWindowToken(), 0);
}

1
আপনার কেন 200 এমএস অপেক্ষা করতে হবে? এটি প্রয়োজনীয় বা আমি কেবল তা সঙ্গে সঙ্গে দেখাতে পারি?
কোডার 123

11

এটি আমার পক্ষে কাজ করেছে, ফোকাস সেট করে এবং কীবোর্ডটিও দেখায়

EditText userNameText = (EditText) findViewById(R.id.textViewUserNameText);
userNameText.setFocusable(true);
userNameText.setFocusableInTouchMode(true);
userNameText.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(userNameText, InputMethodManager.SHOW_IMPLICIT);

1
ধন্যবাদ। setFocusableএপিআই 26 প্রয়োজন। এছাড়াও setFocusableInTouchModeআমার ক্ষেত্রে প্রয়োজন ছিল না।
কুলমাইন্ড

8

যদি আমরা গতিশীলভাবে একটি এডিটেক্সট তৈরি করি তবে আমাদের নীচের মত অনুরোধ ফোকাস () সেট করতে হবে।

    EditText editText = new EditText(this);
    editText.setWidth(600);
    editText.requestFocus();

ইতিমধ্যে যদি আমরা এক্সএমএল ভিউতে উপাদানটি ঘোষনা করি তবে আমাদের এটি সন্ধান করতে হবে এবং নীচে বর্ণিত হিসাবে আমরা ফোকাস করতে পারি।

EditText e1=(EditText) findViewById(R.id.editText1);
e1.requestFocus();

এটি কেবলমাত্র সম্পর্কিত সম্পাদনা উপাদানকে ফোকাস সেট করে।


6
    mEditText.setFocusableInTouchMode(true);
    mEditText.requestFocus();

    if(mEditText.requestFocus()) {
        getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
    }

4
    Button btnClear = (Button) findViewById(R.id.btnClear);

    EditText editText1=(EditText) findViewById(R.id.editText2);
    EditText editText2=(EditText) findViewById(R.id.editText3);

    btnClear.setOnClickListener(new View.OnClickListener() {

        @Override

        public void onClick(View v) {

            editText1.setText("");
            editText2.setText("");

            editText1.requestFocus();
        }
    });

3
 private void requestFocus(View view) {
        if (view.requestFocus()) {
            getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
        }
    }

//Function Call
requestFocus(yourEditetxt);


2

Xamarin.Android এর জন্য আমি এই এক্সটেনশনটি তৈরি করেছি।

public static class ViewExtensions
{
    public static void FocusEditText(this EditText editText, Activity activity)
    {
        if (editText.RequestFocus())
        {
            InputMethodManager imm = (InputMethodManager)activity.GetSystemService(Context.InputMethodService);
            imm.ShowSoftInput(editText, ShowFlags.Implicit);
        }
    }
}

2

ম্যানিফেস্টে দয়া করে এই কোডটি চেষ্টা করুন

<activity android:name=".EditTextActivity" android:windowSoftInputMode="stateAlwaysVisible">
</activity>

2

requestFocus()লেআউট স্ফীত হওয়ার আগে যদি আপনি কল করার চেষ্টা করেন তবে এটি মিথ্যা হবে return এই কোডটি লেআউট স্ফীত হওয়ার পরে চলে। উপরে বর্ণিত হিসাবে আপনার 200 এমএস বিলম্বের প্রয়োজন নেই ।

editText.post(Runnable {
   if(editText.requestFocus()) {
       val imm = editText.context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager?
       imm?.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0)
   }
})

1

আমি জানি না আপনি যদি সমাধানটি সমাধান করেছেন কিনা তবে আবার মনোযোগ দেওয়ার অনুরোধ করার পরে আপনার সম্পাদনা সমস্যার জন্য:

আপনি কি আপনার এডিটেক্সট 1 এ পদ্ধতিটি কল করতে চেষ্টা করেছেন selectAll()বা setSelection(0)(যদি এমপিপি হয়)?

এটি সাহায্য করে কিনা আমাকে দয়া করে জানান, সুতরাং আমি আমার উত্তরটি একটি সম্পূর্ণ সমাধানে সম্পাদনা করব।


1
new OnEditorActionListener(){
   @Override
   public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
      editText.requestFocus();
      //used ******* return true ******
      return **true**;
   }
} 

0

ব্যবহার যদি requestFocus()মধ্যে onCreate()কীবোর্ড ইস্যু আলতো চাপুন দেখাচ্ছে না প্রবর্তন করে, ব্যবহার BindingAdapterএকটি ব্যবহার SingleLiveEvent এবং যে ভিতরে ফোকাস অনুরোধ।

এটি কীভাবে করবেন তা এখানে:

BindingAdapter

@BindingAdapter("requestFocus")
fun bindRequestFocus(editText: EditText, event: Event<Boolean>?) {
    event?.getContentIfNotHandled()?.let {
        if (it) editText.requestFocus()
    }
}

0

আমার উত্তর এখানে

আমি যখন অফিসিয়াল ডকুমেন্টে পড়েছি, আমার মনে হয় এটিই সেরা উত্তর, কেবল আপনার সম্পাদনা পাঠ্যের মতো প্যারামিটারে ভিউটি পাস করুন, তবে শো সোফট কীবোর্ডটি ল্যান্ডস্কেপটিতে কাজ না করার মতো বলে মনে হচ্ছে this

private fun showSoftKeyboard(view: View) {
    if (view.requestFocus()) {
        val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.showSoftInput(view, InputMethodManager.SHOW_IMPLICIT)
    }
}

private fun closeSoftKeyboard(view: View) {
    if (view.requestFocus()) {
        val imm = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
        imm.hideSoftInputFromWindow(view.windowToken, InputMethodManager.HIDE_NOT_ALWAYS)
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.