Android 访问片段中ListView中的单选按钮(从另一个片段获取updatet)
我在一个活动中有两个列表片段。当在左侧片段中选择一行时,我会在右侧片段中显示一些数据,这也是一个ListView。此视图的一行包含一个TextView和三个单选按钮 我的目标是获得这些按钮,例如设置值和设置onClickListener 我的问题是,我在正确的片段中选择的选项不起作用,但我不知道为什么。我尝试将ListFragment作为左侧片段和一个具有自定义id的ListView进行exend 我是否必须从ListFragment进行扩展,或者这与普通ListView相同? 是否必须使用onActivityCreate设置onClickListener? 这段代码是多次尝试不同帖子中的一些代码的结果。我发现有一些错误 这是我左边的片段:Android 访问片段中ListView中的单选按钮(从另一个片段获取updatet),android,listview,android-fragments,Android,Listview,Android Fragments,我在一个活动中有两个列表片段。当在左侧片段中选择一行时,我会在右侧片段中显示一些数据,这也是一个ListView。此视图的一行包含一个TextView和三个单选按钮 我的目标是获得这些按钮,例如设置值和设置onClickListener 我的问题是,我在正确的片段中选择的选项不起作用,但我不知道为什么。我尝试将ListFragment作为左侧片段和一个具有自定义id的ListView进行exend 我是否必须从ListFragment进行扩展,或者这与普通ListView相同? 是否必须使用on
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 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;
}
}
不要在主题中放置标签:尝试在布局文件中将您的单选按钮设置为不可聚焦,android:focusable=false。要查看用户何时检查其中一个单选按钮,您需要一个自定义适配器。谢谢您的回复。我禁用了这些单选按钮的焦点。现在我得到了一个事件,单击了listitem。我还编写了一个customadapter,在其中定义按钮并设置侦听器。