android - EditText এ ফোকাস সেট করুন




focus android-edittext (10)

Darwind কোড কীবোর্ড দেখানো হয়নি।

এটি আমার জন্য কাজ করে:

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

যদি কীবোর্ডটি দেখানো না হয়, তাহলে জোর করে চেষ্টা করুন:

        imm.showSoftInput(_searchText, InputMethodManager.SHOW_FORCED);

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

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

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

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

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

EDIT2: আমার কোড পরিবর্তন। দৃশ্যপট:

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

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

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

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

আপনি একটি লাইন দিয়ে এটি করতে পারে:

yourEditText.RequestFocusFromTouch();

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

EDIT2: সুতরাং এখানে কিভাবে এটি কাজ করতে হবে তার জন্য কিছু কোড। EDIT3: দুঃখিত ভুল কোড আমি যোগ করেছি ...; এস

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

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 একই শ্রোতার কাছে সেট করা উচিত যেমন আমি উদাহরণে করেছি।


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

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

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

editText.requestFocus();

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


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

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

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






android-edittext