【问题标题】:how to create a list view when a button is pressed using fragment如何在使用片段按下按钮时创建列表视图
【发布时间】:2014-12-10 12:24:15
【问题描述】:

在我的应用程序中有一个导航抽屉。当在抽屉中单​​击任何项​​目时,会显示一个文本视图。我使用片段来做到这一点。到目前为止它工作正常。 现在我想在导航抽屉中单击第二个项目时显示一个列表。但它不断使应用程序崩溃。该列表是使用自定义适配器自定义的,并且是使用列表片段创建的。

在 MainActivity.java 中

private class DrawerItemClickListener implements ListView.OnItemClickListener
{
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id)
    {
        selectItem(position);

selectItem 方法

private void selectItem(int position)
{
    int pos = position;
    Fragment fragment = null;
    switch (pos) {
    case 0: 
        fragment = new FragmentSell();
        break;

    case 1: 
        fragment = new FragmentBuy();
        break;
    }
    FragmentManager fragmentManager = getFragmentManager();
    fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit();

适配器

public class FragmentBuyAdapter extends ArrayAdapter<ItemBuy> {

private ArrayList<ItemBuy> objects;
public ArrayAdapter<Integer> adapter_weight;
public String weight;
public Context context;

public FragmentBuyAdapter(Context context, int textViewResourceId,
        ArrayList<ItemBuy> objects) {
    super(context, textViewResourceId, objects);
    this.objects = objects;
    this.context = context;
}

public View getView(int position, View convertView, ViewGroup parent) {

    View v = convertView;

    if (v == null) {
        LayoutInflater inflater = (LayoutInflater) getContext()
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = inflater.inflate(R.layout.fragment_buy_list_item, null);
    }

    ItemBuy i = objects.get(position);

    if (i != null) {

        TextView name = (TextView) v.findViewById(R.id.tv_shop_name);
        TextView desc = (TextView) v.findViewById(R.id.tv_shop_description);

            if (name != null) {
                name.setText(i.getName());
            }
            if (desc != null) {
                desc.setText(i.getDesc());
            }
        }

        return v;
    }
}

logcat-

10-15 11:37:05.860: W/dalvikvm(973): threadid=1: thread exiting with uncaught exception group=0xb4aebb90)
10-15 11:37:05.890: E/AndroidRuntime(973): FATAL EXCEPTION: main
10-15 11:37:05.890: E/AndroidRuntime(973): Process: com.coach.zudash, PID: 973
10-15 11:37:05.890: E/AndroidRuntime(973): java.lang.RuntimeException: Content has view with id attribute 'android.R.id.list' that is not a ListView class
10-15 11:37:05.890: E/AndroidRuntime(973):  at android.app.ListFragment.ensureList(ListFragment.java:402)
10-15 11:37:05.890: E/AndroidRuntime(973):  at android.app.ListFragment.onViewCreated(ListFragment.java:203)
10-15 11:37:05.890: E/AndroidRuntime(973):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:904)
10-15 11:37:05.890: E/AndroidRuntime(973):  at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1062)
10-15 11:37:05.890: E/AndroidRuntime(973):  at android.app.BackStackRecord.run(BackStackRecord.java:684)
10-15 11:37:05.890: E/AndroidRuntime(973):  at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1447)
10-15 11:37:05.890: E/AndroidRuntime(973):  at android.app.FragmentManagerImpl$1.run(FragmentManager.java:443)
10-15 11:37:05.890: E/AndroidRuntime(973):  at android.os.Handler.handleCallback(Handler.java:733)
10-15 11:37:05.890: E/AndroidRuntime(973):  at android.os.Handler.dispatchMessage(Handler.java:95)
10-15 11:37:05.890: E/AndroidRuntime(973):  at android.os.Looper.loop(Looper.java:137)
10-15 11:37:05.890: E/AndroidRuntime(973):  at android.app.ActivityThread.main(ActivityThread.java:4998)
10-15 11:37:05.890: E/AndroidRuntime(973):  at java.lang.reflect.Method.invokeNative(Native Method)
10-15 11:37:05.890: E/AndroidRuntime(973):  at java.lang.reflect.Method.invoke(Method.java:515)
10-15 11:37:05.890: E/AndroidRuntime(973):  at     com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:777)
10-15 11:37:05.890: E/AndroidRuntime(973):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:593)
10-15 11:37:05.890: E/AndroidRuntime(973):  at dalvik.system.NativeStart.main(Native Method)

【问题讨论】:

  • 请提供崩溃日志?
  • 我添加了logcat
  • 你能把FragmentBuy的代码和它的布局贴出来吗?

标签: android list listview android-fragments fragment


【解决方案1】:

您的视图持有者模式实现已磨损。

试试这个链接。 http://www.codeofaninja.com/2013/09/android-viewholder-pattern-example.html

应用视图持有者模式将解决您的问题并使列表滚动更顺畅。 您的 getView 方法存在滞后,因为您正在为每一行查找 textView 的引用。这些都可以通过 view Holder 模式来克服

【讨论】:

    【解决方案2】:

    哦,我明白了... 我没有在我的布局(xml 文件)中使用列表视图的默认 ID .. 它应该是 android:id="@+id/android:list",

    感谢大家的时间和帮助...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 1970-01-01
      相关资源
      最近更新 更多