アクティビティ内に 2 つの (リスト) フラグメントがあります。左の Fragment で行が選択されると、ListView でもある右の Fragment にデータが表示されます。このビューの行には、TextView と 3 つの RadioButton が含まれています。
私の目標は、これらのボタンを取得して値を設定し、onClickListener を設定することです。
私の問題は、右の Fragment の onItemSelected() が機能しなかったことですが、その理由はわかりません。ListFragment (左の Fragment として) と、カスタム ID を持つ ListView から拡張しようとしています。
- ListFragment から拡張する必要がありますか、それとも通常の ListView と同じですか?
- onClickListener を設定するために onActivityCreate を使用する必要がありますか?
このコードは、さまざまな投稿からいくつかのコードを試すための多くの試みの産物です。いくつかのエラーがあることがわかります。
これは私の左のフラグメントです:
public class HeaderListFragment extends ListFragment {
private final static String TAG = "HeaderListFragment";
List<ChecklistItem> header;
static ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
private DBManager db_manager;
private SimpleAdapter simpleAdapter;
//getstring -> BUG
String[] from = { "number","text" };
int[] to = { R.id.listele_header_no, R.id.listele_header_text};
public void buildList(){
Log.v(TAG, "buildList");
list = new ArrayList<HashMap<String,String>>();
for (ChecklistItem item : header){
HashMap<String, String> map = new HashMap<String, String>();
map.put("number", item.getnumber());
map.put("text", item.gettext());
list.add(map);
}
}
@Override
public void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
updateDetail(header.get(position).getparent_id());
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.headerfragment,
container, false);
db_manager = new DBManager(getActivity().getContentResolver());
header = db_manager.getItemHeader();
Log.v(TAG, "HEADER LIST SIZE "+header.size());
buildList();
simpleAdapter = new SimpleAdapter(getActivity(),
list,
R.layout.headeritem_row,
from,
to);
setListAdapter(simpleAdapter);
Log.v(TAG, "set adapter");
return view;
}
// May also be triggered from the Activity
public void updateDetail(int id) {
QuestionListFragment fragment = (QuestionListFragment) getFragmentManager()
.findFragmentById(R.id.questionFragment);
if (fragment != null && fragment.isInLayout()) {
fragment.setUI(id);
}
そして私の右のフラグメント:
public class QuestionListFragment extends ListFragment {
private final static String TAG = "QuestionListFragment";
List<ChecklistItem> questions;
static ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
private DBManager db_manager;
private SimpleAdapter simpleAdapter;
private ProgressDialog dialog;
private RadioGroup radioGroup;
private RadioButton yes, na, open;
private ListView listview;
//getstring -> BUG
String[] from = { "number","text" };
int[] to = { R.id.listele_question_no, R.id.listele_question_text};
public void buildList(){
Log.v(TAG, "buildList");
list = new ArrayList<HashMap<String,String>>();
for (ChecklistItem item : questions){
Log.v(TAG, item.gettext());
HashMap<String, String> map = new HashMap<String, String>();
map.put("number", item.getnumber());
map.put("text", item.gettext());
list.add(map);
}
}
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.questionfragment,
container, false);
Log.v(TAG, "onCreateView");
db_manager = new DBManager(getActivity().getContentResolver());
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.v(TAG, "onActivityCreated");
listview = getListView();
listview.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
Log.d(TAG, "--> onItemClick listener..."); // You should see this now
}*/
}});
}
public void setUI(Integer parent_id) {
Log.v(TAG, "setUI");
questions = db_manager.getQuestions(parent_id);
buildList();
simpleAdapter = new SimpleAdapter(getActivity(),
list,
R.layout.questionitem_row,
from,
to);
listview.setAdapter(simpleAdapter);
setListAdapter(simpleAdapter);
Log.v(TAG, "set adapter");
あなたのフィードバックでうまくいきます!これは私のコードです:
public class QuestionListFragment extends ListFragment {
private final static String TAG = "QuestionListFragment";
List<ChecklistItem> questions;
static ArrayList<HashMap<String,String>> list = new ArrayList<HashMap<String,String>>();
private DBManager db_manager;
private ProgressDialog dialog;
private ListViewCustomAdapter adapter;
public void buildList(){
Log.v(TAG, "buildList");
list = new ArrayList<HashMap<String,String>>();
for (ChecklistItem item : questions){
Log.v(TAG, item.gettext());
HashMap<String, String> map = new HashMap<String, String>();
map.put("number", item.getnumber());
map.put("text", item.gettext());
list.add(map);
}
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.questionfragment,
container, false);
Log.v(TAG, "onCreateView");
db_manager = new DBManager(getActivity().getContentResolver());
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
Log.v(TAG, "onActivityCreated");
getListView().setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position,
long arg3) {
Log.d(TAG, "--> onItemClick listener...");
}});
}
public void setUI(Integer parent_id) {
Log.v(TAG, "setUI");
questions = db_manager.getQuestions(parent_id);
buildList();
adapter = new ListViewCustomAdapter(getActivity(), (ArrayList) questions);
setListAdapter(adapter);
Log.v(TAG, "set adapter");
}
public class ListViewCustomAdapter extends BaseAdapter{
ArrayList<ChecklistItem> itemList;
public Activity context;
public LayoutInflater inflater;
public ListViewCustomAdapter(Activity context, ArrayList<ChecklistItem> itemList) {
super();
this.context = context;
this.itemList = itemList;
this.inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
return itemList.size();
}
@Override
public Object getItem(int position) {
return itemList.get(position);
}
@Override
public long getItemId(int position) {
return 0;
}
public class ViewHolder
{
TextView number;
TextView text;
RadioButton yes,na,open;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final int pos = position;
ViewHolder holder;
if(convertView==null)
{
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.questionitem_row, null);
holder.text = (TextView) convertView.findViewById(R.id.listele_question_text);
holder.number = (TextView) convertView.findViewById(R.id.listele_question_no);
holder.yes = (RadioButton)convertView.findViewById(R.id.rb_yes);
RadioButton rb = (RadioButton)convertView.findViewById(R.id.rb_yes);
rb.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.v(TAG, "yes");
Log.v(TAG, questions.get(pos).gettext());
}
});
holder.yes = rb;
convertView.setTag(holder);
}
else
holder=(ViewHolder)convertView.getTag();
ChecklistItem item = (ChecklistItem) itemList.get(position);
holder.text.setText(item.gettext());
holder.number.setText(item.getnumber());
return convertView;
}
}