Android:onlistitemclick inアクティビティ
質問
ここで質問をした前に、私は多くを学んだので、もう一度試してみる価値があると思います。
私はこのリンクからFedorの怠zyなリストを使用しています:ListViewの怠zyな画像
それは魅力のように機能しています。しかし、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()
アクティビティをクリックします(望ましい) - または、コードをaに変換しますか
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がaに添付されています 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から来ている場合)
単にオーバーライドするのではなく ListActivity
's onListItemClickListener()
, 、ここにあなたはあなたの呼び出しを持っているでしょう 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);
}
}
DataSourceフルーツにはいくつかの文字列が含まれていると仮定します。定義できます 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);
}