web-dev-qa-db-ja.com

ListViewのカスタムアダプタからデータを取得するにはどうすればよいですか?

ここに私の問題があります:

ListView用のカスタムアダプターを作成し、そのアダプターに提供する情報をリストから取得して、彼が私のListViewを実行できるようにしました。彼はすべてを正しく行います。ここで、OnItemClickListenerを実装し、そこからデータを取得したいと思います。しかし、そのリストには4つのTextViewがあります...

データを取得するにはどうすればよいですか

トーストに表示するので、IDと位置を取得する方法をすでに知っています。

助けてくれてありがとう!

これがカスタムアダプタです:

public class NextRdvAdapter extends ArrayAdapter<NextRdv> {
private List<NextRdv> listNextRdv = new ArrayList<NextRdv>(); 
private Context context; 

public NextRdvAdapter(List<NextRdv> nextRdvList, Context ctx) {
    super(ctx, R.layout.list_next_rdv, nextRdvList);
    this.listNextRdv = nextRdvList; 
    this.context = ctx;
} 

public View getView(int position, View convertView, ViewGroup parent) {

    if (convertView == null) { // This a new view we inflate the new layout 
        LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        convertView = inflater.inflate(R.layout.list_next_rdv, parent, false); 
        } // Now we can fill the layout with the right values 

    TextView tvTimeStart = (TextView) convertView.findViewById(R.id.next_time_start); 
    TextView tvTimeEnd = (TextView) convertView.findViewById(R.id.next_time_end); 
    TextView tvEnterprise = (TextView) convertView.findViewById(R.id.next_enterprise_name); 
    TextView tvAddress = (TextView) convertView.findViewById(R.id.next_address); 
    NextRdv rdv = listNextRdv.get(position); 

    tvTimeStart.setText(rdv.getStartTime());
    tvTimeEnd.setText(rdv.getEndTime());
    tvEnterprise.setText(rdv.getEnterprise());
    tvAddress.setText(rdv.getAddress());


    return convertView; 
    }
}

これがListViewをポーズする私のフラグメントです:

public class HomeFragment extends Fragment implements OnItemClickListener{

float density;

//Everything you need about this rdv
private ListView lvThisRdv;
private List<NextRdv> listThisRdv = new ArrayList<NextRdv>();
private NextRdvAdapter ThisRdvAdapter;  
private NextRdvListBouchon thisBouchon;

//Everything you need about next rdv
private ListView lvNextRdv;
private List<NextRdv> listNextRdv = new ArrayList<NextRdv>();
private NextRdvAdapter nextRdvAdapter;  
private NextRdvListBouchon bouchon;

public HomeFragment(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.fragment_home, container, false);


    lvThisRdv = (ListView)rootView.findViewById(R.id.listView_this_RDV);
    thisBouchon = new NextRdvListBouchon();
    listThisRdv = thisBouchon.getBouchonInc();
    ThisRdvAdapter = new NextRdvAdapter(listThisRdv, getActivity());
    lvThisRdv.setAdapter(ThisRdvAdapter);

    //Displaying the list of the next meetings
    lvNextRdv = (ListView)rootView.findViewById(R.id.listView_next_RDV);

    //Get test data
    bouchon = new NextRdvListBouchon();
    listNextRdv = bouchon.getBouchon();

    nextRdvAdapter = new NextRdvAdapter(listNextRdv, getActivity());
    lvNextRdv.setAdapter(nextRdvAdapter);

    lvNextRdv.setOnItemClickListener(new OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> parent, View view,
            int position, long id) {

              //
              Toast toast = Toast.makeText(getActivity(), "Pos : " +position+ " / id : " + id, Toast.LENGTH_SHORT);
              toast.show();
          }

    });

    return rootView;
}

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
        long id) {
}
}
8
Kevin Gilles

onItemClick内では、AdapterView引数を使用できます。

NextRdv item = (NextRdv) parent.getItemAtPosition(position)
13
Blackbelt

以下のコードを使用できます

 lvNextRdv.setOnItemClickListener(new OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView<?> parent, View view,
        int position, long id) {

       // selected item
       String selected =((TextView)view.findViewById(R.id.your_textView_item_id)).getText().toString();

        Toast toast=Toast.makeText(getApplicationContext(), selected, Toast.LENGTH_SHORT);
        toast.show();

      }

});

これを使用すると、選択した行のカスタムアダプタ内の任意のTextViewのデータを取得できます。

希望はあなたを助けるでしょう...

7
Neha Shukla