سؤال

في المرة السابقة ، طرحت سؤالاً هنا تعلمت الكثير ، لذا أعتقد أن الأمر يستحق لقطة لتجربته مرة أخرى.

أنا أستخدم القائمة الكسول من قبل فيدور من هذا الرابط:تحميل كسول للصور في ListView

إنه يعمل مثل سحر. لكن فيدور يجعل صفه الرئيسي يمتد Activity بدلاً من ListActivity. ولهذا السبب ، لم أعد قادرًا على استخدام مستمع ListItemClick. يعلن Eclipse بعض الأخطاء حولها onListItemClick(). إنه يعمل عندما أتحول

    @Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
     // Intent launcher here
}

داخل

   protected void onListItemClick(ListView l, View v, int position, long id) {
     // Intent launcher here
   }

لكن قاذفة القصد لا تعمل. لا إخطار الخبز المحمص.

عندما أقلب Activity في ListActivity, ، Eclipse لا يتدفق ، لكن المحاكي الخاص بي يعطيني قوة.

كيف أحصل

  • أيضاً onListItemClick() انقر في النشاط (المفضل)
  • أو هل أقوم بتحويل الكود إلى أ ListActivity بدون قوة إغلاق؟

شكرا جزيلا مقدما.

هل كانت مفيدة؟

المحلول

أنا أكتب إجابتي على النحو التالي:

1) يحتاج الرمز بواسطة falmarri إلى بعض التحديثات
2) تم رفض التحرير المقترح الخاص بي XD بالكامل
3) لا يسمح لي Stackoverflow بكتابة تعليق.

هنا هو الرمز:

ListView listView = (ListView) findViewById(R.id.my_listview_in_layout);
listview.setOnItemClickListener(new AdapterView.OnItemClickListener(){
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id){
        //Do stuff
        //...
    }
});


المرجعي: وفق Android.Widget.adapterView.OnitemClickListener , ، الطريقة العامة OnItemClick () هي الطريقة التي يتم استدعاؤها عند النقر فوق عنصر {بدلاً من طريقة محمية غير معروفة onlistitemclick () }

نصائح أخرى

يتم إرفاق ListItEmClickListener بـ ListView. عندما تغيرت ListActivity إلى Activity, ، لم يعد الفصل الخاص بك لديه وجهة نظر مرتبطة به وبالتالي Activity ليس لدى الفصل أي فكرة عما يجب فعله مع onlistItemClickListener.

عليك فقط إرفاق مستمع الخاص بك ListView:

listview.setOnItemClickListener(new OnItemClickListener(){
    @Override
    protected void onListItemClick(AdapterView<?> parent, View view, int position, long id){
        //Do stuff
    }
});

لقد كنت أعمل على هذا طوال اليوم وبعد أن صنعت بلدي ArrayAdapter لم أستطع معرفة كيفية تغيير الفصول في قائمتي.

إليك كيف اكتشفت كيفية القيام بذلك. بعد أن اتصلت بصفيفتي ، انتهيت ببساطة من الكود في هذه الطريقة عن طريق القيام بذلك.

ListView lv =getListView();
lv.setOnItemClickListener(this);

ثم بعد كل نصي وضعت

public void onItemClick(AdapterView<?> arg0, View arg1, int position,
            long arg3) {
    String item = (String) getListAdapter().getItem(position);

    if (item.equals("Economy"))
    {
        Intent intent = new Intent(packages.this, economy.class);
        startActivity(intent);
    }
    else if (item.equals("Basic"))
    {
        Intent intent = new Intent(packages.this, basic.class);
        startActivity(intent);
    }
    else if (item.equals("Professional"))
    {
        Intent intent = new Intent(packages.this, professional.class);
        startActivity(intent);
    }
    else if (item.equals("Custom Applications"))
    {
        Intent intent = new Intent(packages.this, applications.class);
        startActivity(intent);
    }
}

بيني تمكنت من تخصيص بلدي تماما ListView مع الخط المخصص والخلفيات. أنا متأكد من أن الكثير منكم لا يهتم حقًا. لكنني خرجت وكنت آمل من خلال نشر هذا الأمر قد أساعد شخصًا ما في المستقبل.

لغيرListActivity للحصول على عنصر تنقر فوق العنصر لـ A ListView, ، عليك الاتصال setOnItemClickedListener() على ال ListView (قد تحتاج إلى الحصول على هذا باستخدام findViewById() إذا كان يأتي من XML)

بدلا من مجرد تجاوز ListActivityonListItemClickListener(), ، هنا سيكون لديك الاحتجاج الخاص بك Activity ينفذ AdapterView.onItemClickedListener() وتمريرها كمعلمة إلى setOnItemClickedListener().

(إذا قرأت الرمز المصدر ل ListActivity (وهو ما أوصي به) ، سترى أنه يفعل ذلك تمامًا وراء الكواليس من خلال إنشاء كائن مستمع داخلي يدعو التجاوز الخاص بك onListItemClick()).

إذا كنت تستخدم ListActivity ثم تريد أن تفعل شيئًا كهذا:

public class YourClass extends ListActivity implements OnItemClickListener{

    @Override
    public void onCreate(Bundle icicle){
        super.onCreate(icicle);
        setContentView(R.layout.your_layout);

        getListView().setOnItemClickListener(this);
    }

    @Override
    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
        // your stuff here
    }
}

هذه ليست الطريقة الوحيدة لتعيين OnItemClickListener. انظر إلى إجابات أخرى. هذه هي الطريقة التي أحب أن أفعلها لأنه أكثر وضوحًا وأسهل في القراءة.

fe.java

package com.example.rfe;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import android.app.ListActivity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class FE extends ListActivity {
 public List<String> d = null;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.file);
        d = new ArrayList<String>();    
        Scanner in = null;
        File f = new File("/sdcard/input.txt");
        try
        {
        in = new Scanner(new FileReader(f));
        while(in.hasNext()==true)
        {
            d.add(in.nextLine());   
        }
        }catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
    }
        ArrayAdapter<String> fileList =
                  new ArrayAdapter<String>(this, R.layout.row, d);
                 setListAdapter(fileList);
    }
 @Override
 protected void onListItemClick(ListView l, View v, int position, long id) 
 {
     String selection = l.getItemAtPosition(position).toString();
     Toast.makeText(this, selection, Toast.LENGTH_LONG).show();
    super.onListItemClick(l, v, position, id);
}
}

افترض أن لديك فاكهة بيانات البيانات تحتوي على عدد قليل من الأوتار. يمكنك تحديد onCreate() كالتالي:

setListAdapter(new ArrayAdapter<String>(this, R.layout.list_fruit,
                FRUITS)); // context is this, style is list_fruit, Context, ,data_binding to FRUITs

ثم اكتب onListItemClick() كالتالي:

protected void onListItemClick(ListView parent, View v, int position, long id) {
                Toast.makeText(this,  " You selected  " + FRUITS[position], Toast.LENGTH_SHORT).show();
        }

أتمنى أن يناسبك :)

لقد أضفت ببساطة المتابعة في onCreate():

    listvview.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {
            setPaymentDetails();
        }
    });

خارج onCreate() وأضاف setPaymentDetails():

protected void setPaymentDetails()
{
    Intent intent = new Intent(this, SetPaymentDetailsActivity.class);
    startActivity(intent);
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top