অ্যান্ড্রয়েডে লিস্টভিউ ক্লিকটি কীভাবে পরিচালনা করবেন


141

আমি কীভাবে একটি তালিকাভিউতে ইভেন্ট ক্লিক করতে শুনতে পারি?

আমার এখন যা আছে

ListView list = (ListView)findViewById(R.id.ListView01);  
...  
list.setAdapter(adapter);  

আমি যখন নিম্নলিখিতটি করি

list.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {  
   public void onItemSelected(AdapterView parentView, View childView, 
                                                         int position, long id) 
   {  
       setDetail(position);  
   }

   public void onNothingSelected(AdapterView parentView) {  

   }  
});  

ক্লিক এ কিছুই করার মনে হয় না।
এবং এই সমস্ত কোড ক্রিয়াকলাপকে প্রসারিত করে এমন একটি শ্রেণীর মধ্যেই থাকে।

উত্তর:


182

আপনার তালিকা দেখুন, ব্যবহার করুন setOnItemClickListener


ধন্যবাদ ডেভিড গিজেজ, আমি সেটঅনলিক্লিকলিস্টার এবং সেটঅনটাইমসলেক্টলিস্টনার চেষ্টা করেছি তবে সেটঅনটাইমক্লিকলিস্টনার পড়তে মিস করেছি। ধন্যবাদ, টি
তেপাসিংক

আমি তেমনই টিপাসিংকের মতো করেছিলাম: ডি
শেরিফ মারজুক

আপনি কীভাবে সেই বিশদ দৃশ্যে ডেটা প্রেরণ করবেন? (ইউটিউব একটি ভিডিওতে ক্লিক করে পছন্দ করুন)
সাওরন

প্রথমে, ক্লাসটি ক্লিক শ্রোতার প্রয়োগ করতে হবে: অনআইটেমিক্লিকলিস্টার প্রয়োগ করে তারপরে একটি শ্রোতাকে তালিকাভিউতে আপনারলিস্ট.সেটঅনআইটেমিক্লিকলিস্টনার (এটি) সেট করুন; এবং পরিশেষে, ক্লিক পদ্ধতিটি তৈরি করুন: @ সার্বজনীন শূন্য অন আইটেমিক্লিক (অ্যাডাপ্টারভিউ <?> প্যারেন্ট, ভিউ, ইনট পজিশন, লং আইডি) ast টোস্ট.মেকটেক্সট (মেইনএকটিভিটি.এটি, "আপনি" + দেশগুলিতে ক্লিক করেছেন [+ অবস্থান], Toast.LENGTH_SHORT) .show (); }
বোরাক্স ওয়েবমাস্টার

88

ধরুন, লিস্টভিউ অবজেক্টটি lv, নিম্নলিখিতটি করুন -

lv.setClickable(true);
lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {

  @Override
  public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

    Object o = lv.getItemAtPosition(position);
    /* write you handling code like...
    String st = "sdcard/";
    File f = new File(st+o.toString());
    // do whatever u want to do with 'f' File object
    */  
  }
});

1
lvভিতরে প্রবেশযোগ্য নয় onItemClick। এর কাছাকাছি যাওয়ার একটি দুর্দান্ত উপায় কী?
shinjin

1
@ সিনজিন এটি চূড়ান্ত করুন। final ListView lv = (ListView) findViewById(R.id.your_list_view);
লেকেনস্টেইন

পরিষ্কার উপায়:Object o = ((ListView)arg0).getItemAtPosition(position);
জিমিবি

এখানে ডকুমেন্টেশনের লিঙ্কটি রয়েছে: developer.android.com/references/android/widget/…
ট্রিনিটি 420

42

আপনার অ্যাডাপ্টারের ক্লাস getView () পদ্ধতিতে আপনাকে স্ফীতিযুক্ত ভিউ "ক্লিকযোগ্য" এবং "ইভেন্টগুলি ক্লিক করতে শুনতে সক্ষম" সেট করতে হবে।

convertView = mInflater.inflate(R.layout.list_item_text, null);
convertView.setClickable(true);
convertView.setOnClickListener(myClickListener);

এবং আপনার লিস্টঅ্যাক্টিভিটিতে ক্লিক শ্রোতাদের নীচে ঘোষণা করুন,

public OnClickListener myClickListener = new OnClickListener() {
public void onClick(View v) {
                 //code to be written to handle the click event
    }
};

আপনি যখন বেসএডাপ্টার প্রসারিত করে অ্যাডাপ্টারটি কাস্টমাইজ করছেন তখনই এটি সত্য হয়।

আরও তথ্যের জন্য ANDROID_SDK / নমুনা / ApiDemos / src / com / উদাহরণ / android / apis / ভিউ / তালিকা 14. জাভা দেখুন


বিজয় ধন্যবাদ আমি আপনার উত্তর থেকে সমাধান করেছি
স্ফুটিত

তবে এটি নির্ধারণ করে না কোন আইটেমটি ক্লিক করা হচ্ছে, যা এটি তালিকার জন্য আরও-বা কম অকেজো করে তোলে? সঠিক?
ফার্ম উটপাখি

আপনি রূপান্তরভিউতে ট্যাগ সেট করতে পারেন এবং অনিক্লিকে একই পরীক্ষা করতে পারেন .. কোন আইটেমটি ক্লিক করা হয় তা ট্যাগ ব্যবহার করে সনাক্ত করা যায় ...
বিজয় সি

আমি আপনার অ্যাডাপ্টারের একটি ট্যাগের চেয়ে আরও মার্জিত সমাধান খুঁজে পেয়েছি একটি সেটঅনক্লিকলিস্টার রেফারেন্স সঞ্চয় করে এবং অনক্লিক (ভি ভি) পদ্ধতিতে কল করুন। তারপরে ক্রিয়াকলাপটি অবস্থান সহ ইভেন্টটি গ্রহণ করতে পারে।
jocelyn

আপনার অনক্লিক পদ্ধতিটি ভুল। এটি আইটেম ক্লিক ক্লিক করা উচিত (অ্যাডাপ্টারভিউ <?> প্যারেন্ট, ভিউ, ইনট পজিশন, লং আইডি)
আইগোরগানপলস্কি

17

আমার আগে দুটি উত্তর সঠিক - আপনি ব্যবহার করতে পারেন OnItemClickListener

এটি লক্ষ্য করা ভাল যে সূক্ষ্ম শোনার সময় OnItemClickListenerএবং এর মধ্যে পার্থক্যটি OnItemSelectedListenerউল্লেখযোগ্য, কারণ আইটেম নির্বাচন এবং ফোকাসটি আপনার স্পর্শ মোডের সাথে সম্পর্কিত AdapterView

ডিফল্টরূপে, টাচ মোডে, কোনও নির্বাচন এবং ফোকাস নেই। বিষয়টি সম্পর্কে আরও তথ্যের জন্য আপনি এখানে একবার দেখে নিতে পারেন ।


8

এই সমাধানটি আসলেই সংক্ষিপ্ত এবং আপনার কোডটি বিশৃঙ্খলা করে না।

আপনার list_item.xML এ (তালিকা নয় ভিউ!) অ্যান্ট্রয়েড বৈশিষ্ট্যটি বরাদ্দ করুন : অন ​​ক্লিক করুন এইভাবে :

<RelativeLayout android:onClick="onClickDoSomething">

এবং তারপরে আপনার ক্রিয়াকলাপে এই পদ্ধতিটিকে কল করুন:

public void onClickDoSomething(View view) {
   // the view is the line you have clicked on
}

ভাল সমাধান তবে, ক্লিক করা আইটেমের অবস্থান পাওয়ার কোনও উপায় নেই
বিলাল Şimşek

@ বিলালিমিমেক দীর্ঘদিন ধরে আমি অ্যান্ড্রয়েডের বাইরে আছি তবে যদি viewকিছু মেটাডেটা থাকতে পারে তবে অবস্থানটি কীভাবে পাওয়া যায় তা উপায় হতে পারে।
Amio.io

6

আপনি কেউ ব্যবহার setOnItemClickListenerকরতে হবে বলেন।
কোডটি এর মতো হওয়া উচিত:

listView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
        // When clicked, show a toast with the TextView text or do whatever you need.
        Toast.makeText(getApplicationContext(), ((TextView) view).getText(), Toast.LENGTH_SHORT).show();
    }
});

5

প্রথমত, ক্লাসটি ক্লিক শ্রোতার প্রয়োগ করতে হবে:

implements OnItemClickListener

তারপরে একটি শ্রোতাকে তালিকাভিউতে সেট করুন

yourList.setOnItemclickListener(this);

এবং পরিশেষে, ক্লিক পদ্ধতিটি তৈরি করুন:

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Toast.makeText(MainActivity.this, "You Clicked at " +countries[+ position], Toast.LENGTH_SHORT).show();
}

আপনি এখানে একবার দেখুন এবং কোড ডাউনলোড করতে পারেন


3

আপনার ক্রিয়াকলাপে setOnItemClickListener () এপিআই ব্যবহার করুন। নমুনা নিম্নলিখিত।

listView.setOnItemClickListener(new AdapterView.OnItemClickListener(){

@Override
public void onItemClick(AdapterView<> parent, View view, int position, long id)
{
     // your code here.
}

});

1

কোটলিনে, আপনার তালিকায় শ্রোতার যোগ করুন জাভা হিসাবে সাধারণ simple

your_listview.setOnItemClickListener { parent, view, position, id ->   

    Toast.makeText(this, position, Toast.LENGTH_SHORT).show()

 }
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.