2012-03-19 8 views
0

次のコードでは、自分の行の一部の「要素」にOnclick Listenersを設定します。 setOnclickリスナーコードはどこに置くべきですか?アクティビティコードまたはアダプターにありますか?私は最初だと思いますが、その場合、どの行が選択されたのかをどのようにして確認するのですか? (各行は私を別のビューに誘導するはずです)?リストビューの行から別の画面に移動する

Javaコード:それは私の情報は、通常、その結果を取得していることを意味して

List<String[]> info=new ArrayList<String[]>(); 
     String[] names_info=new String[5]; 
     String[] phones_info=new String[5]; 
     String[] map_info=new String[5]; 
     String[] web_info=new String[5]; 
     String[] photos_info=new String[5]; 
for(int i=0;i<names_info.length;i++) 
    { 
     info.add(new String[]{names_info[i],phones_info[i],map_info[i],web_info[i],photos_info[i]}); 
    } 
    for (int i = 0; i < info.size(); i++) { 
     Log.d("TAG", "item " + i + 
       " name:" + info.get(i)[0] + 
       " info:" + info.get(i)[1]); 
    } 
    FacilitiesAdapter adapter = new FacilitiesAdapter(this,info,want_info_display,want_phone_display,want_photos_display); 
    //System.out.println(info[0]); 
    setListAdapter(adapter); 

EDIT 

ListView lv = getListView(); 



lv.setTextFilterEnabled(true); 

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 

     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      // When clicked, show a toast with the TextView text 
      //Toast.makeText(getApplicationContext(), ((TextView) arg1).getText(), 
      //Toast.LENGTH_SHORT).show(); 
Intent i33 = new Intent(HotelsScreen.this,AbousUsScreen.class); 
      i33.putExtra("position", arg2); 
      System.out.println(arg2); 
      System.out.println(info.get(arg2)[0]); 

     startActivity(i33);    
     } 
    }); 

私は、ログの結果を参照してください。

これは私のアダプタです。

public class FacilitiesAdapter extends ArrayAdapter<String[]> { 
    private final Context context; 
    List <String[]> dataList; 

    public FacilitiesAdapter(Context context, List<String[]> dataList, int need_phone, int need_info, int need_photos) { 
     super(context, R.layout.expand_row); 
     this.context = context; 
     this.dataList = dataList; 
     //this.tracks_condition=tracks_condition; 
     //this.count=count; 
    } 
    public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
      View rowView = inflater.inflate(R.layout.expand_row, parent, false); 
      System.out.println("I am here"); 
      String[] data = dataList.get(position); 
      String name=data[0]; 
      TextView textView = (TextView) rowView.findViewById(R.id.name); 
      System.out.println("I am in the adapter "+name); 
      textView.setText(name); 
      return rowView; 
    } 
} 

EDIT 1: 私はその位置とその名前をクリックし、すべての項目に見るようになりましたはずですか?何も見えないのですか?

答えて

1

だけでは何か、これらの線のように簡単になります

listview.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, View arg1, int position, 
     long arg3) 
    { 
    Intent i33 = new Intent(MyScreen.this,OtherScreen.class); 
    i33.putExtra("position", position); 
    startActivity(i33); 
    } 
}); 
+0

これはおそらくあなたのonCreate – dldnh

+0

Okで表示されます。そして、どのように私はパラメータを渡すことができます(名前と情報の両方、 'onItemClick'がアダプタと同じ' dataList'にアクセスできる場合は、 –

+1

を開くためにウィックスクリーンを知るためにそれらを使うように指示します。上記のような 'i33.putExtra(...)'を使用してください。 – dldnh

0

私はあなたの最大の問題は、適切な画面に行をマッピングする方法を考え出すことになると思います。これを行うことができれば、すべてのマッピングでMapオブジェクトを設定できます。

あなたのアダプターでは、ビューでsetTag()を使用して、マップから戻ったものを渡してから、そこから新しいインテントを作成することができます。

//In your adapter's getView() method... 
Class activityClass = rowToActivityMap.get(someRowAttribute); 
view.setTag(activityClass); 

//In your click listener... 
Class activityClass = (Class)view.getTag(); 
Intent intent = new Intent(this, activityClass); 
startActivity(intent); 
関連する問題