ここに私の問題があります:
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) {
}
}
onItemClick
内では、AdapterView
引数を使用できます。
NextRdv item = (NextRdv) parent.getItemAtPosition(position)
以下のコードを使用できます
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のデータを取得できます。
希望はあなたを助けるでしょう...