it-swarm.dev

كيفية التعامل مع الحدث انقر في Listview في الروبوت؟

أدناه هو رمز الاختبار الخاص بي لإنشاء طريقة عرض القائمة ، عرض طريقة عرض القائمة بنجاح ، ومع ذلك ، هناك خطأ في الحدث انقر. أرغب في إنشاء نية لإرسال رسالة hardcode إلى نشاط جديد. ومع ذلك ، فإنه يظهر خطأ للخط

Intent intent = new Intent(context, SendMessage.class);

لذا ، فإن المشكلة هي ، ما الذي يجب أن أقدمه لهذه الفئة؟

أيضًا ، بدلاً من الرمز الثابت لرسالة الإخراج ، كيفية التقاط البيانات في صف عرض القائمة وتمريرها إلى النشاط الجديد؟ مثلا BBB,AAA,R.drawable.tab1_hdpi للصف الأول.

شكر.

public class MainActivity extends Activity {
    public final static String EXTRA_MESSAGE = "com.example.ListViewTest.MESSAGE";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ArrayList<ListEntry> members = new ArrayList<ListEntry>(); 
        members.add(new ListEntry("BBB","AAA",R.drawable.tab1_hdpi));
        members.add(new ListEntry("ccc","ddd",R.drawable.tab2_hdpi));
        members.add(new ListEntry("assa","cxv",R.drawable.tab3_hdpi));
        members.add(new ListEntry("BcxsadvBB","AcxdxvAA"));
        members.add(new ListEntry("BcxvadsBB","AcxzvAA"));
        members.add(new ListEntry("BcxvBB","AcxvAA"));
        members.add(new ListEntry("BvBB","AcxsvAA"));
        members.add(new ListEntry("BcxvBB","AcxsvzAA"));
        members.add(new ListEntry("Bcxadv","AcsxvAA"));
        members.add(new ListEntry("BcxcxB","AcxsvAA"));
        ListView lv = (ListView)findViewById(R.id.listView1);
        Log.i("testTag","before start adapter");
        StringArrayAdapter ad = new StringArrayAdapter (members,this);
        Log.i("testTag","after start adapter");
        Log.i("testTag","set adapter");
        lv.setAdapter(ad);
        lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                Intent intent = new Intent(context, SendMessage.class);
                String message = "abc";
                intent.putExtra(EXTRA_MESSAGE, message);
                startActivity(intent);
            }
        });
    }
42
user782104

لا أستطيع رؤية أين تعلن context. لغرض إنشاء النية ، يمكنك استخدام MainActivity.this

 lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                Intent intent = new Intent(MainActivity.this, SendMessage.class);
                String message = "abc";
                intent.putExtra(EXTRA_MESSAGE, message);
                startActivity(intent);
            }
        });

لاسترداد الكائن الذي قمت بالنقر فوقه ، يمكنك استخدام AdapterView:

ListEntry entry = (ListEntry) parent.getItemAtPosition(position);
98
Blackbelt

ListView لديه عنصر انقر فوق رد الاتصال المستمع. يجب عليك تعيين onItemClickListener في ListView. يحتوي رد الاتصال على AdapterView و position كمعلمة. والتي يمكن أن تعطيك ListEntry.

lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                ListEntry entry= (ListEntry) parent.getAdapter().getItem(position);
                Intent intent = new Intent(MainActivity.this, SendMessage.class);
                String message = entry.getMessage();
                intent.putExtra(EXTRA_MESSAGE, message);
                startActivity(intent);
            }
        });
13
Kapil Vats

أولاً ، يجب أن يقوم الفصل بتنفيذ برنامج استماع النقر:

implements OnItemClickListener

ثم قم بتعيين مستمع إلى ListView

yourList.setOnItemclickListener(this);

وأخيراً ، قم بإنشاء طريقة clic:

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

الخطأ قادم في شفرتك من هذا البيان كما قلت

Intent intent = new Intent(context, SendMessage.class);

هذا يرجع لك لأنك تقدم سياق OnItemClickListener فئة مجهولة في مُنشئ Intent لكن وفقًا لمنشئ Intent

Android.content.Intent.Intent(Context packageContext, Class<?> cls)

يجب عليك تقديم سياق نشاطك الذي تستخدم فيه القصد وهو سياق فئة MainActivity. لذلك سيتم تحويل بيانك الذي يعطي الخطأ إلى

Intent intent = new Intent(MainActivity.this, SendMessage.class);

أيضًا لإرسال رسالتك من MainActivity إلى فئة SendMessage ، يرجى الاطلاع على الرمز أدناه

lv.setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position,
                    long id) {
                ListEntry entry= (ListEntry) parent.getAdapter().getItem(position);
                Intent intent = new Intent(MainActivity.this, SendMessage.class);
                intent.putExtra(EXTRA_MESSAGE, entry.getMessage());
                startActivity(intent);
            }
        });

واسمحوا لي أن أعرف إذا كان هذا يساعدك

EDIT: - إذا كنت تجد بعض المشكلات للحصول على قيمة القائمة ، فافعل شيئًا واحدًا يوضح قائمة الصفيف

ArrayList<ListEntry> members = new ArrayList<ListEntry>();

على الصعيد العالمي ، أي قبل بدء النشاط وتغيير مستمعك على النحو التالي

 lv.setOnItemClickListener(new OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position,
                        long id) {
                    Intent intent = new Intent(MainActivity.this, SendMessage.class);
                    intent.putExtra(EXTRA_MESSAGE, members.get(position));
                    startActivity(intent);
                }
            });

لذلك سوف يظهر رمزك بالكامل

public class MainActivity extends Activity {
    public final static String EXTRA_MESSAGE = "com.example.ListViewTest.MESSAGE";
ArrayList<ListEntry> members = new ArrayList<ListEntry>();

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

        members.add(new ListEntry("BBB","AAA",R.drawable.tab1_hdpi));
        members.add(new ListEntry("ccc","ddd",R.drawable.tab2_hdpi));
        members.add(new ListEntry("assa","cxv",R.drawable.tab3_hdpi));
        members.add(new ListEntry("BcxsadvBB","AcxdxvAA"));
        members.add(new ListEntry("BcxvadsBB","AcxzvAA"));
        members.add(new ListEntry("BcxvBB","AcxvAA"));
        members.add(new ListEntry("BvBB","AcxsvAA"));
        members.add(new ListEntry("BcxvBB","AcxsvzAA"));
        members.add(new ListEntry("Bcxadv","AcsxvAA"));
        members.add(new ListEntry("BcxcxB","AcxsvAA"));
        ListView lv = (ListView)findViewById(R.id.listView1);
        Log.i("testTag","before start adapter");
        StringArrayAdapter ad = new StringArrayAdapter (members,this);
        Log.i("testTag","after start adapter");
        Log.i("testTag","set adapter");
        lv.setAdapter(ad);
        lv.setOnItemClickListener(new OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position,
                            long id) {
                        Intent intent = new Intent(MainActivity.this, SendMessage.class);
                        intent.putExtra(EXTRA_MESSAGE, members.get(position).getMessage());
                        startActivity(intent);
                    }
                });
    }

حيث ستكون getMessage () طريقة getter المحددة في فئة ListEntry التي تستخدمها للحصول على رسالة تم تعيينها مسبقًا.

6
Abhinav Singh Maurya
    //get main activity
    final Activity main_activity=getActivity();

    //list view click listener
    final ListView listView = (ListView) inflatedView.findViewById(R.id.listView_id);
    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            String stringText;

            //in normal case
            stringText= ((TextView)view).getText().toString();                

            //in case if listview has separate item layout
            TextView textview=(TextView)view.findViewById(R.id.textview_id_of_listview_Item);
            stringText=textview.getText().toString();                

            //show selected
            Toast.makeText(main_activity, stringText, Toast.LENGTH_LONG).show();
        }
    });

    //populate listview
2
Rijul Sudhir

وفقا لاختبار بلدي ،

  1. تنفذ OnItemClickListener -> الأعمال.

  2. setOnItemClickListener -> الأعمال.

  3. ListView قابل للنقر افتراضيًا (API 19)

الشيء المهم هو أن "النقر" يعمل فقط على TextView (إذا اخترت simple_list_item_1.xml كبند). هذا يعني أنك إذا قدمت بيانات نصية لـ ListView ، فإن "النقر" يعمل عند النقر فوق منطقة النص. انقر على منطقة فارغة لا يؤدي إلى "انقر فوق الحدث".

2
Chaohsiung Huang