有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ListView仅在滚动时显示行

现在我的ListView出现了一个问题,当我加载列表活动时,第一行显示出来,但其他行是空的,当我向下滚动和向后滚动时,会弹出更多行。我的listview得到了正确的数据,我的删除方法仍然有效,但唯一的问题是,在我向下滚动并备份之前,没有行,只有2-3行显示,除非我将textSize设置得更大,否则会显示更多行

管理类

package com.fullfrontalgames.numberfighter;

import 安卓.app.ListActivity;
import 安卓.content.Context;
import 安卓.database.Cursor;
import 安卓.os.Bundle;
import 安卓.view.LayoutInflater;
import 安卓.view.View;
import 安卓.view.View.OnClickListener;
import 安卓.view.ViewGroup;
import 安卓.widget.BaseAdapter;
import 安卓.widget.Button;
import 安卓.widget.ListAdapter;
import 安卓.widget.TextView;

public class Admin extends ListActivity {
    private DBAdapter db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.admin);

        DBAdapter db = new DBAdapter(this);
        db.open();
        getListView().setAdapter(new PlayerAdapter(this, db.getAllPlayers()));
    }

    private class PlayerAdapter extends BaseAdapter implements OnClickListener, ListAdapter {
        private Cursor mPlayers;

        private Context mContext;

        public PlayerAdapter(Context context, Cursor players) {
            mContext = context;
            mPlayers = players;
        }

        @Override
        public int getCount() {
            return mPlayers.getCount();
        }

        @Override
        public PlayerInfo getItem(int position) {
            if (mPlayers.moveToPosition(position)) {
                String name = mPlayers.getString(mPlayers.getColumnIndex("USERNAME"));
                String password = mPlayers.getString(mPlayers.getColumnIndex("PASSWORD"));
                String email = mPlayers.getString(mPlayers.getColumnIndex("EMAIL"));

                return new PlayerInfo(name, password, email);
            }

            return null;
        }

        @Override
        public long getItemId(int position) {
            mPlayers.moveToPosition(position);
            return mPlayers.getLong(mPlayers.getColumnIndex("_id"));
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            if (convertView == null) {
                convertView = LayoutInflater.from(mContext).inflate(R.layout.list_items, parent,
                        false);
            }

            PlayerInfo playerInfo = getItem(position);
            TextView nameTextView = ViewHolder.get(convertView, R.id.AdminUsername);
            TextView passwordTextView = ViewHolder.get(convertView, R.id.AdminPassword);
            TextView emailTextView = ViewHolder.get(convertView, R.id.AdminEmail);
            Button deleteButton = ViewHolder.get(convertView, R.id.PlayerDelete, position);
            deleteButton.setOnClickListener(this);

            nameTextView.setText(playerInfo.getName());
            passwordTextView.setText(playerInfo.getPassword());
            emailTextView.setText(playerInfo.getEmail());
            return convertView;
        }

        @Override
        public void onClick(View v) {

            db.open();

            int position = (Integer)v.getTag();
            mPlayers.moveToPosition(position);
            long id = mPlayers.getLong(mPlayers.getColumnIndex("_id"));
            db.deleteFriend();
            mPlayers = db.getAllPlayers();
            notifyDataSetChanged();

            db.close();

        }
    }

}

管理xml

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    安卓:orientation="vertical"
    安卓:background="@color/black" >


    <ListView 
    安卓:id="@安卓:id/list"
    安卓:layout_width="match_parent"
    安卓:layout_height="match_parent"
    安卓:layout_gravity="center" >

    </ListView>





</LinearLayout>

adminlistitems xml

    <LinearLayout xmlns:安卓="http://schemas.安卓.com/apk/res/安卓"
安卓:layout_width="match_parent"
安卓:layout_height="wrap_content"
安卓:orientation="horizontal"
安卓:weightSum="4"
安卓:padding="5dp" >

<LinearLayout
    安卓:layout_width="0dp"
    安卓:layout_height="wrap_content"
    安卓:layout_weight="3"
    安卓:orientation="vertical" >

    <TextView
        安卓:id="@+id/AdminUsername"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:textIsSelectable="false" />

    <TextView 
        安卓:id="@+id/AdminPassword"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:textIsSelectable="false" />

    <TextView 
        安卓:id="@+id/AdminEmail"
        安卓:layout_width="wrap_content"
        安卓:layout_height="wrap_content"
        安卓:textIsSelectable="false" />


</LinearLayout>

<Button
        安卓:id="@+id/PlayerDelete"
        安卓:layout_width="0dp"
        安卓:layout_height="wrap_content"
        安卓:layout_weight="1"
        安卓:text="Delete" />

</LinearLayout>

视图持有者类

    package com.fullfrontalgames.numberfighter;

import 安卓.util.SparseArray;
import 安卓.view.View;
import 安卓.widget.Button;
import 安卓.widget.TextView;

@SuppressWarnings("unchecked")
public class ViewHolder {

    private static final String TAG = "View Holder";

    public static <T extends View> T get(View view, int id) {
        SparseArray<View> viewHolder = (SparseArray<View>)view.getTag();
        if (viewHolder == null) {
            viewHolder = new SparseArray<View>();
            view.setTag(viewHolder);
        }
        View childView = viewHolder.get(id);
        if (childView == null) {
            childView = view.findViewById(id);
            viewHolder.put(id, childView);
        }
        return (T)childView;
    }

    public static <T extends View> T get(View view, int id, int position) {
        SparseArray<View> viewHolder = (SparseArray<View>)view.getTag();
        if (viewHolder == null) {
            viewHolder = new SparseArray<View>();
            view.setTag(viewHolder);
        }
        View childView = viewHolder.get(id);

        if (childView == null) {
            childView = view.findViewById(id);
            viewHolder.put(id, childView);
        }
        childView.setTag(position);
        return (T)childView;
    }

    public TextView text1;

    public Button button;
}

PlayerInfo类

package com.fullfrontalgames.numberfighter;

public class PlayerInfo {
    private String mName;

    private String mPassword;

    private String mEmail;

    public PlayerInfo(String name, String password, String email) {
        mName = name;
        mPassword = password;
        mEmail = email;
    }

    public String getName() {
        return mName;
    }

    public String getPassword() {
        return mPassword;
    }

    public String getEmail() {
        return mEmail;
    }

}

LogCat

    04-21 02:23:21.563: E/AndroidRuntime(23401): FATAL EXCEPTION: main
04-21 02:23:21.563: E/AndroidRuntime(23401): java.lang.NullPointerException
04-21 02:23:21.563: E/AndroidRuntime(23401):    at com.fullfrontalgames.numberfighter.ViewHolder.get(ViewHolder.java:40)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at com.fullfrontalgames.numberfighter.Admin$PlayerAdapter.getView(Admin.java:75)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.AbsListView.obtainView(AbsListView.java:2402)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.ListView.makeAndAddView(ListView.java:1769)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.ListView.fillDown(ListView.java:672)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.ListView.fillFromTop(ListView.java:733)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.ListView.layoutChildren(ListView.java:1622)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.AbsListView.onLayout(AbsListView.java:2237)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.View.layout(View.java:13840)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.ViewGroup.layout(ViewGroup.java:4372)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.LinearLayout.onLayout(LinearLayout.java:1420)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.View.layout(View.java:13840)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.ViewGroup.layout(ViewGroup.java:4372)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.FrameLayout.onLayout(FrameLayout.java:448)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.View.layout(View.java:13840)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.ViewGroup.layout(ViewGroup.java:4372)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.LinearLayout.setChildFrame(LinearLayout.java:1649)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.LinearLayout.layoutVertical(LinearLayout.java:1507)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.LinearLayout.onLayout(LinearLayout.java:1420)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.View.layout(View.java:13840)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.ViewGroup.layout(ViewGroup.java:4372)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.widget.FrameLayout.onLayout(FrameLayout.java:448)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.View.layout(View.java:13840)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.ViewGroup.layout(ViewGroup.java:4372)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.ViewRootImpl.performLayout(ViewRootImpl.java:1948)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1758)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1042)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:4329)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.Choreographer$CallbackRecord.run(Choreographer.java:725)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.Choreographer.doCallbacks(Choreographer.java:555)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.Choreographer.doFrame(Choreographer.java:525)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:711)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.os.Handler.handleCallback(Handler.java:615)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.os.Handler.dispatchMessage(Handler.java:92)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.os.Looper.loop(Looper.java:137)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at 安卓.app.ActivityThread.main(ActivityThread.java:5059)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at java.lang.reflect.Method.invokeNative(Native Method)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at java.lang.reflect.Method.invoke(Method.java:511)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at com.安卓.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at com.安卓.internal.os.ZygoteInit.main(ZygoteInit.java:555)
04-21 02:23:21.563: E/AndroidRuntime(23401):    at dalvik.system.NativeStart.main(Native Method)

共 (0) 个答案