【问题标题】:Android custom listview row wont let me addAndroid自定义列表视图行不会让我添加
【发布时间】:2012-10-10 10:44:17
【问题描述】:

我有一个列表视图,只需使用 simple_list_view1 就可以正常工作。但现在我需要在左侧添加一个图标。所以我在 res/layout/ 中创建了一个 iconrow.xml。当我尝试将其设置为布局时,它会出错并且不会让我使用android.R.layout.iconrow,。显然我在这里做错了什么!这是一个正在构建的用于填充数据的数组。

我的 xml 是:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@android:drawable/ic_delete" />

    <TextView
        android:id="@+id/text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Medium Text"
        android:textAppearance="?android:attr/textAppearanceMedium" />

</LinearLayout>

我的代码是:

光标 c = db.rawQuery(SQLStatement, null);
if(c.getCount() != 0) {

Log.e("LocationListView", "Found Items");   

c.moveToFirst();

ArrayList mItemName = new ArrayList(); final ArrayList mItemID = new ArrayList();

c.moveToFirst();
while(!c.isAfterLast()) {
     mItemName.add(c.getString(c.getColumnIndex("Name")));
     mItemID.add(c.getString(c.getColumnIndex(ColType)));
     c.moveToNext();
}
rowCount = mItemName.size();

listView = (ListView) findViewById(R.id.lvLocation);
final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
      android.R.layout.iconrow, android.R.id.text1, mItemName);

int[] colors = {0, 0xFFFF0000, 0}; 
listView.setDivider(new GradientDrawable(Orientation.RIGHT_LEFT, colors));
listView.setDividerHeight(1);
listView.setAdapter(adapter); 

listView.setClickable(true);

错误出现在 android.R.layout.iconrow

我们将不胜感激。

汤姆

编辑:这是我现在的代码 - tv.setText(mItemName.get(arg0).toString()); 上的错误

     c.moveToFirst();


      final ArrayList<String> mItemID = new ArrayList<String>();

        c.moveToFirst();
        while(!c.isAfterLast()) {
             mItemName.add(c.getString(c.getColumnIndex("Name")));
             mItemID.add(c.getString(c.getColumnIndex(ColType)));
             c.moveToNext();
        }
        rowCount = mItemName.size();

        listView = (ListView) findViewById(R.id.lvLocation);

//        final ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
//                R.layout.iconrow, R.id.text, mItemName);
        tv.setText(mItemName.get(arg0).toString()); 

        int[] colors = {0, 0xFFFF0000, 0}; 
        listView.setDivider(new GradientDrawable(Orientation.RIGHT_LEFT, colors));
        listView.setDividerHeight(1);
        listView.setAdapter(new CustomAdapter());

        listView.setClickable(true);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

            Object o = listView.getItemAtPosition(position);
            String StationObjectID = mItemID.get(position);

            Intent SwapPage = new Intent(arg1.getContext(), LocationListView.class);
            SwapPage.putExtra("ID", StationObjectID);
            SwapPage.putExtra("Type", Type);

            startActivityForResult(SwapPage, 0);

          }
        });

        } else {

            Log.e("LocationListView", "Not Found Items");   
            Context context = getApplicationContext();
            CharSequence text = "No data returned";
            int duration = Toast.LENGTH_LONG;
            Toast toast = Toast.makeText(context, text, duration);
            toast.show();       

        }

        db.close();

    }

        public void goBack(View view) {

            if(Global.returnPage.equals("MainPage")) {  

            Intent addItem = new Intent(view.getContext(), MainPage.class);
            startActivityForResult(addItem, 0);

            } else {
                Intent addItem = new Intent(view.getContext(), LocationListView.class);
                addItem.putExtra("Type", Global.stepListType);
                Log.e("PushThrough", Global.stepListType);
                addItem.putExtra("ID", Global.stepListID);
                Log.e("PushThrough", Global.stepListID);
                startActivityForResult(addItem, 0);
            }
        }


        public void addItem(View view){
            Intent addItem = new Intent(view.getContext(), AddItem.class);
            addItem.putExtra("Count", rowCount);

            if(Adding.equals("Building")){

                addItem.putExtra("Type", "0");

            } else if(Adding.equals("Room")){

                addItem.putExtra("Type", "1001");
                addItem.putExtra("PrevID", dataID);

            } else if (Adding.equals("Area")){

                addItem.putExtra("Type", "532");
                addItem.putExtra("PrevID", dataID);
            }

                startActivityForResult(addItem, 0);
        }

        public void onResume()
        {
            super.onResume();

           Log.e("Tom", "resumed");
        }


        class CustomAdapter extends BaseAdapter
        {

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return mItemName.size();
        }

        @Override
        public Object getItem(int arg0) {
            // TODO Auto-generated method stub
            return null;
        }

        @Override
        public long getItemId(int arg0) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int arg0, View arg1, ViewGroup arg2) {
            // TODO Auto-generated method stub

            LayoutInflater inf=getLayoutInflater();
            View v=inf.inflate(R.layout.iconrow, arg2,true);

            ImageView iv=(ImageView)v.findViewById(R.id.icon);
            TextView tv=(TextView)v.findViewById(R.id.text);

            return v;
        }

    }

}

【问题讨论】:

标签: java android listview


【解决方案1】:

创建自定义适配器

class CustomAdapter extends BaseAdapter
    {

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return mItemName.size;
    }

    @Override
    public Object getItem(int arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public long getItemId(int arg0) {
        // TODO Auto-generated method stub
        return 0;
    }

    @Override
    public View getView(int arg0, View arg1, ViewGroup arg2) {
        // TODO Auto-generated method stub

        LayoutInflater inf=getLayoutInflater();
        View v=inf.inflate(R.layout.iconrow, arg2,true);

        ImageView iv=(ImageView)v.findViewById(R.id.icon);
        TextView tv=(TextView)v.findViewById(R.id.text);

        return v;
    }

}

然后将其设置为您的列表

listview.setAdapter(new CustomAdapter());

【讨论】:

  • 谢谢。我正在尝试执行此操作,但出现错误 mItemName.size 未声明且 LayoutInflater inf=getLayoutInflater();对于 CustomRow 类型,方法 getLayoutInflater() 未定义
  • mItemName 是你的 ArrayList,所以在你的类中全局声明它而不是在任何方法中............什么是 CustomRow?还有一件事......让 CustomAdapter 类成为你的主类中的内部类
  • 谢谢。现在如何将数组中的项目设置到列表视图?
  • tv.setText(mitemName.get(arg0).toString()); ......如果有效,请接受答案
  • 感谢您迄今为止的所有帮助。真的很感激。我已经在我的问题中更新了我的代码,因为我显然做错了什么并且无法解决
【解决方案2】:

另一种实现方式如下:

public class CustomArrayAdapter extends ArrayAdapter<Applications>{
    private MainActivity context;
    private int layoutResourceId;
    private int textresourceId;
   ArrayList<Applications> objects=null;

    public CustomArrayAdapter(MainActivity context, int resource,ArrayList<Applications> objects) {
        super(context, resource);
        this.context = context;
        this.layoutResourceId = resource;
        this.objects = objects;
        Log.d("CustomArrayAdapter","Was here!!");
    }

    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return objects.size();
    }


    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }



    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inf=getLayoutInflater();
        View convertView=inf.inflate(R.layout.iconrow, arg2,true);

        ImageView iv=(ImageView)v.findViewById(R.id.icon);
        TextView tv=(TextView)v.findViewById(R.id.text);

        return convertView;
    }
}

【讨论】:

    猜你喜欢
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多