web-dev-qa-db-ja.com

Android:アクティビティのonListItemClick

前回ここで質問したときはたくさんのことを学んだので、もう一度試してみる価値があると思います。

このリンクからFedorによる遅延リストを使用しています: ListViewでの画像の遅延読み込み

それは魅力のように働いています。しかし、Fedorは彼のメインクラスを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
   }
_

しかし、インテントランチャーは機能しません。トースト通知も行いません。

ActivityListActivityで回すと、Eclipseはよろめきませんが、エミュレーターは強制的に閉じます。

どうすれば入手できますか

  • アクティビティをonListItemClick()クリックします(推奨)
  • または、強制終了せずにコードをListActivityに変換しますか?

よろしくお願いします。

11
Vic V

私は私の答えを次のように書いています:

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()の代わりに }

1
Vinay Vissh

ListItemClickListenerはListViewに添付されています。 ListActivityActivityに変更すると、クラスに関連付けられたビューがなくなるため、ActivityクラスはonListItemClickListenerをどう処理するかわかりません。

リスナーをListViewにアタッチするだけです。

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

私は一日中これに取り組んでいて、自分で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を完全にカスタマイズすることができました。あなたのトンは本当に気にしないと確信しています。しかし、私は終了し、これを投稿することで、将来誰かを助けるかもしれないと期待していました。

1
Nathan Kellert

ListActivity以外でListViewのitem-clicked-listenerを使用するには、ListViewsetOnItemClickedListener() を呼び出す必要があります(findViewById() XMLからのものの場合)

ListActivityonListItemClickListener()をオーバーライドするだけでなく、ここでは、呼び出し元のActivityを実装する必要があります AdapterView.onItemClickedListener() そしてそれをパラメーターとしてsetOnItemClickedListener()に渡します。

ListActivity(私がお勧めします)のソースコードを読むと、オーバーライドされたonListItemClick()を呼び出す内部リスナーオブジェクトを作成することで、舞台裏でそれが正確に行われていることがわかります)。

1
Yoni Samlan

データソースFruitに含まれる文字列が少ないと仮定します。 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();
        }
_

私はそれがあなたのために働くことを願っています:)

0
J4cK

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を設定する方法はこれだけではありません。他の答えを見てください。これは、より明確で読みやすいので、私がそれを行うのが好きな方法です。

0
Cristian

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);
}
_
0
ray

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