Android findViewById在片段中不工作
findViewById在片段中不起作用此处我正在尝试将listview添加到特定片段,但我无法使用find viewBy Id映射listview控件 我是android开发的初学者,我不知道如何实现这个片段 有人能帮我吗Android findViewById在片段中不工作,android,android-fragments,Android,Android Fragments,findViewById在片段中不起作用此处我正在尝试将listview添加到特定片段,但我无法使用find viewBy Id映射listview控件 我是android开发的初学者,我不知道如何实现这个片段 有人能帮我吗 public class FindPeopleFragment extends Fragment { public FindPeopleFragment(){} private static final String TAG = "CardListActivity"; p
public class FindPeopleFragment extends Fragment {
public FindPeopleFragment(){}
private static final String TAG = "CardListActivity";
private CardArrayAdapter cardArrayAdapter;
private ListView listView;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_find_people, container, false);
return rootView;
listView = (ListView) findViewById(R.id.card_listView);
listView.addHeaderView(new View(this));
listView.addFooterView(new View(this));
cardArrayAdapter = new CardArrayAdapter(getApplicationContext(), R.layout.list_item_card);
for (int i = 0; i < 10; i++) {
Card card = new Card("Card " + (i+1) + " Line 1", "Card " + (i+1) + " Line 2");
cardArrayAdapter.add(card);
}
listView.setAdapter(cardArrayAdapter);
}
public class CardArrayAdapter extends ArrayAdapter<Card> {
private static final String TAG = "CardArrayAdapter";
private List<Card> cardList = new ArrayList<Card>();
public class CardViewHolder {
TextView line1;
TextView line2;
}
public CardArrayAdapter(Context context, int textViewResourceId) {
super(context, textViewResourceId);
}
@Override
public void add(Card object) {
cardList.add(object);
super.add(object);
}
@Override
public int getCount() {
return this.cardList.size();
}
@Override
public Card getItem(int index) {
return this.cardList.get(index);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
CardViewHolder viewHolder;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) this.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.list_item_card, parent, false);
viewHolder = new CardViewHolder();
viewHolder.line1 = (TextView) row.findViewById(R.id.line1);
viewHolder.line2 = (TextView) row.findViewById(R.id.line2);
row.setTag(viewHolder);
} else {
viewHolder = (CardViewHolder)row.getTag();
}
Card card = getItem(position);
viewHolder.line1.setText(card.getLine1());
viewHolder.line2.setText(card.getLine2());
return row;
}
public Bitmap decodeToBitmap(byte[] decodedByte) {
return BitmapFactory.decodeByteArray(decodedByte, 0, decodedByte.length);
}
}
公共类FindPeopleFragment扩展片段{
public FindPeopleFragment(){}
私有静态最终字符串TAG=“CardListActivity”;
私人卡适配卡适配卡适配卡;
私有列表视图列表视图;
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u find\u people,container,false);
返回rootView;
listView=(listView)findViewById(R.id.card\u listView);
addHeaderView(新视图(this));
addFooterView(新视图(this));
cardArrayAdapter=新的cardArrayAdapter(getApplicationContext(),R.layout.list\u item\u card);
对于(int i=0;i<10;i++){
卡片=新卡片(“卡片”+(i+1)+“第1行”、“卡片”+(i+1)+“第2行”);
cardArrayAdapter.add(卡片);
}
setAdapter(cardArrayAdapter);
}
公共类CardArrayAdapter扩展了ArrayAdapter{
私有静态最终字符串TAG=“cardarayadapter”;
private List cardList=new ArrayList();
公共类名片夹{
文本视图第1行;
文本视图第2行;
}
公共CardArrayAdapter(上下文,int textViewResourceId){
super(上下文,textViewResourceId);
}
@凌驾
公共作废添加(卡片对象){
cardList.add(对象);
super.add(object);
}
@凌驾
public int getCount(){
返回此.cardList.size();
}
@凌驾
公共卡getItem(内部索引){
返回此.cardList.get(索引);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
视图行=转换视图;
名片夹;
if(行==null){
LayoutFlater充气器=(LayoutFlater)this.getContext().getSystemService(Context.LAYOUT\u充气器\u服务);
行=充气机。充气(R.layout.list\u item\u card,父项,false);
viewHolder=新卡viewHolder();
viewHolder.line1=(TextView)row.findViewById(R.id.line1);
viewHolder.line2=(TextView)row.findViewById(R.id.line2);
row.setTag(viewHolder);
}否则{
viewHolder=(CardViewHolder)行。getTag();
}
卡片=获取项目(位置);
viewHolder.line1.setText(card.getLine1());
viewHolder.line2.setText(card.getLine2());
返回行;
}
公共位图decodeToBitmap(字节[]decodedByte){
返回BitmapFactory.decodeByteArray(DecodeByte,0,DecodeByte.length);
}
}
}去做吧
listView = (ListView) rootView.findViewById(R.id.card_listView);
搬家
return rootView;
最后,onCreateView(…)
更正:
你也应该改变
listView.addHeaderView(new View(this));
listView.addFooterView(new View(this));
到
您的oncreateview应如下所示:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_find_people, container, false);
listView = (ListView)rootView.findViewById(R.id.card_listView);
listView.addHeaderView(new View(this));
listView.addFooterView(new View(this));
cardArrayAdapter = new CardArrayAdapter(getApplicationContext(), R.layout.list_item_card);
for (int i = 0; i < 10; i++) {
Card card = new Card("Card " + (i+1) + " Line 1", "Card " + (i+1) + " Line 2");
cardArrayAdapter.add(card);
}
listView.setAdapter(cardArrayAdapter);
return rootView;
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u find\u people,container,false);
listView=(listView)rootView.findViewById(R.id.card\u listView);
addHeaderView(新视图(this));
addFooterView(新视图(this));
cardArrayAdapter=新的cardArrayAdapter(getApplicationContext(),R.layout.list\u item\u card);
对于(int i=0;i<10;i++){
卡片=新卡片(“卡片”+(i+1)+“第1行”、“卡片”+(i+1)+“第2行”);
cardArrayAdapter.add(卡片);
}
setAdapter(cardArrayAdapter);
返回rootView;
}
试试这个
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_find_people, container, false);
listView = (ListView) rootView.findViewById(R.id.card_listView);
listView.addHeaderView(new View(this));
listView.addFooterView(new View(this));
cardArrayAdapter = new CardArrayAdapter(getApplicationContext(), R.layout.list_item_card);
for (int i = 0; i < 10; i++) {
Card card = new Card("Card " + (i+1) + " Line 1", "Card " + (i+1) + " Line 2");
cardArrayAdapter.add(card);
}
listView.setAdapter(cardArrayAdapter);
return rootView;
}
@覆盖
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图根视图=充气机。充气(R.layout.fragment\u find\u people,container,false);
listView=(listView)rootView.findViewById(R.id.card\u listView);
addHeaderView(新视图(this));
addFooterView(新视图(this));
cardArrayAdapter=新的cardArrayAdapter(getApplicationContext(),R.layout.list\u item\u card);
对于(int i=0;i<10;i++){
卡片=新卡片(“卡片”+(i+1)+“第1行”、“卡片”+(i+1)+“第2行”);
cardArrayAdapter.add(卡片);
}
setAdapter(cardArrayAdapter);
返回rootView;
}
片段没有findViewById()。您必须使用View对象来访问片段中的方法(在您的例子中是“rootView”)。如果您使用的是Activity,则可以直接使用findViewById(),因为Activity具有该方法
更新代码中的a行,如下所示,它将使其工作
listView = (ListView)rootView.findViewById(R.id.card_listView);
在onCreateView()的末尾添加以下行
return rootView;
cardArrayAdapter=新的cardArrayAdapter(getApplicationContext(),R.layout.list\u item\u card);无法解析方法getApplicationContext()
listView = (ListView)rootView.findViewById(R.id.card_listView);
return rootView;