前回ここで質問したときはたくさんのことを学んだので、もう一度試してみる価値があると思います。
このリンクから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
}
_
しかし、インテントランチャーは機能しません。トースト通知も行いません。
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
以外でListView
のitem-clicked-listenerを使用するには、ListView
で setOnItemClickedListener()
を呼び出す必要があります(findViewById()
XMLからのものの場合)
ListActivity
のonListItemClickListener()
をオーバーライドするだけでなく、ここでは、呼び出し元のActivity
を実装する必要があります AdapterView.onItemClickedListener()
そしてそれをパラメーターとしてsetOnItemClickedListener()
に渡します。
(ListActivity
(私がお勧めします)のソースコードを読むと、オーバーライドされたonListItemClick()
を呼び出す内部リスナーオブジェクトを作成することで、舞台裏でそれが正確に行われていることがわかります)。
データソース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();
}
_
私はそれがあなたのために働くことを願っています:)
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
を設定する方法はこれだけではありません。他の答えを見てください。これは、より明確で読みやすいので、私がそれを行うのが好きな方法です。
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);
}
_
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);
}
}