【发布时间】:2015-03-26 02:29:43
【问题描述】:
我正在尝试使用 SQLite 数据库中的一组联系人填充 RecyclerView。我从 onCreate 中读到的关于这样做的所有内容都说要这样做
public class Contacts extends Activity {
private RecyclerView rView;
private NewAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.contacts_main);
rView = (RecyclerView) findViewById(R.id.r_list);
adapter = new NewAdapter(Contacts.this, DBDatabaseAdapter.getContactData());
rView.setLayoutManager(new LinearLayoutManager(this));
rView.setAdapter(adapter);
}
}
但它给了我一个错误
03-25 22:17:24.505:E/AndroidRuntime(16011):java.lang.RuntimeException:无法启动活动 ComponentInfo{edu.ecpi.myappv3/edu.ecpi.myappv3.Contacts}:android.view。 InflateException: Binary XML file line #36: Error inflating class android.support.v7.widget.RecyclerView
其他教程都是这样处理的
public View listCreateView (LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
{
View layout = inflater.inflate(R.layout.custom_contact, container, false);
rView = (RecyclerView) layout.findViewById(R.id.r_list);
adapter = new NewAdapter(Contacts.this, DBDatabaseAdapter.getContactData());
rView.setAdapter(adapter);
return layout;
}
它有一个充气机。我想使用第一种方式。任何人都可以帮忙。 这是我的相关代码:
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class NewAdapter extends RecyclerView.Adapter<NewAdapter.MyViewHolder> {
private final LayoutInflater inflater;
private Contact[] contact;
public NewAdapter (Context context, Contact[] contact)
{
inflater = LayoutInflater.from(context);
this.contact=contact;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = inflater.inflate(R.layout.custom_contact, parent, false);
MyViewHolder holder = new MyViewHolder(view);
return holder;
}
@Override
public int getItemCount() {
return contact.length;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Contact current = contact[position];
holder.name.setText(current._name);
holder.address.setText(current._address);
}
class MyViewHolder extends RecyclerView.ViewHolder
{
TextView name;
TextView address;
public MyViewHolder(View itemView) {
super(itemView);
name=(TextView) itemView.findViewById(R.id.contactlayout_name);
address= (TextView) itemView.findViewById(R.id.contactlayout_address);
}
}
}
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<RelativeLayout
android:id="@+id/contact_layout"
android:layout_width="match_parent"
android:layout_height="400dp"
android:layout_gravity="bottom"
android:orientation="horizontal" >
<android.support.v7.widget.RecyclerView
android:id="@+id/r_list"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</android.support.v7.widget.RecyclerView>
</RelativeLayout>
</FrameLayout>
Here is the xml for the recycled object.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/contactlayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/contactlayout_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textAppearance="?android:attr/textAppearanceLarge" />
<TextView
android:id="@+id/contactlayout_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text=""
android:textAppearance="?android:attr/textAppearanceMedium" />
</LinearLayout>
【问题讨论】:
-
引用的appcompat??
-
不相关,但您可以通过以下方式扩充视图布局: View view = LayoutInflater.from(parent.getContext()).inflate( R.layout.custom_contact, parent, false);
标签: java android layout-inflater android-recyclerview