标签: baseadapter

创建通用基本适配器?

我有兴趣创建一个通用的BaseAdapter,它将应用于任何具有任何list_item的ListView.它将为list_view设置item_row.

    public class GenericAdapter extends BaseAdapter
    {

    Context context;

    ArrayList<HashMap<String, String>> list;

    LayoutInflater inflater;

    public GenericAdapter (Context context, ArrayList<HashMap<String, String>> list) 
        {
            this.context = context;

            this.list = list;

            inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }

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

        @Override
        public Object getItem(int position)
        {   
            return list.get(position);
        }

        @Override
        public long getItemId(int position)
        {   
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent)
        {
            View view = convertView;

          if(view == null)
           {
            view = inflater.inflate(R.layout.item_of_any_list, …
Run Code Online (Sandbox Code Playgroud)

android layout-inflater baseadapter

10
推荐指数
1
解决办法
6389
查看次数

Android:如果ListView的性能还不够,该怎么办?

好吧,这个主题已经并且仍然存在很多争论,我已经阅读了许多教程,提示并看到了有关它的讨论.但是当我达到某些行的复杂性时,我仍然遇到了为ListView实现自定义BaseAdapter的问题.所以我基本上拥有的是通过解析来自网络的xml获得的一些实体.另外我获取一些图像等等,所有这些都是在AsyncTask中完成的.我在getView()方法中使用性能优化的ViewHandler方法,并按照每个人的建议重用convertView.即我希望我正在使用ListView,因为它只是显示单个ImageView和两个TextViews,它们使用SpannableStringBuilder进行样式化(我不使用任何HTML.fromHTML)它真的很好用.

现在来了.每当我使用多个小型ImageView,一个Button以及一些使用SpannableStringBuilder进行不同样式设置的TextView扩展行布局时,我都会获得停止滚动的性能.该行包含一个RelativeLayout作为父级,所有其他元素都使用布局参数排列,因此我的布局不能使该行更简单.我必须承认,我从未见过任何包含许多UI元素的行的ListView实现示例.

但是,当我在ScrollView中使用TableLayout并使用AsyncTask(通过onProgressUpdate()稳定添加新行)手动填充它时,即使其中有数百行,它也表现得非常流畅.如果滚动到列表末尾,添加新行时会稍微绊倒一下.否则它比ListView更平滑,它在滚动时总是绊倒.

当ListView不想表现好时,有什么建议吗?我应该继续使用TableLayout方法还是建议使用ListView来优化性能?

这是我的适配器的实现:

protected class BlogsSeparatorAdapter extends BaseAdapter {

        private LayoutInflater inflater;
        private final int SEPERATOR = 0;
        private final int BLOGELEMENT = 1;

        public BlogsSeparatorAdapter(Context context) {
                inflater = LayoutInflater.from(context);
        }

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

        @Override
        public Object getItem(int position) {
                return position;
        }

        @Override
        public int getViewTypeCount() {
                return 2;
        }

        @Override
        public int getItemViewType(int position) {
                int type = BLOGELEMENT;
                if (position == 0) {
                        type = SEPERATOR;
                } else if …
Run Code Online (Sandbox Code Playgroud)

performance android tablelayout android-listview baseadapter

9
推荐指数
1
解决办法
3971
查看次数

如何在由BaseAdapter获取视图方法扩展的类中显示Toast

当我单击列表视图中的按钮时,我有显示Toast消息的问题.问题是我通过BaseAdapter扩展的自定义类我有一个名为GetView的方法我想显示来自该特定消息的Toast消息

以下是我的Listview Row Xml

<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/tools"
    android:id="@+id/scrollView1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    app:context=".HomeActivity" >

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent" >

        <TableRow
            android:id="@+id/tableRow_laugh"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content" >

            <RelativeLayout
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:ignore="UselessParent" >

                <TableLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:layout_alignParentLeft="true"
                    android:layout_alignParentTop="true" >

                    <TableRow
                        android:id="@+id/tableRow_Header_laugh"
                        android:layout_width="fill_parent"
                        android:layout_height="wrap_content"
                        android:background="#818085" >

                        <RelativeLayout
                            android:id="@+id/relative_header"
                            android:layout_width="wrap_content"
                            android:layout_height="fill_parent"
                            android:background="#818085" >

                            <ImageView
                                android:id="@+id/UserIconPic_laugh"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_alignParentLeft="true"
                                android:layout_alignParentTop="true"
                                android:layout_weight="0.4"
                                android:src="@drawable/ic_launcher"
                                app:ignore="ObsoleteLayoutParam,ContentDescription" />

                            <Button
                                android:id="@+id/btn_Vote_laugh"
                                android:layout_width="wrap_content"
                                android:layout_height="match_parent"
                                android:layout_alignParentRight="true"
                                android:layout_alignParentTop="true"
                                android:layout_weight=".4"
                                android:text="VOTE"
                                app:ignore="ObsoleteLayoutParam,HardcodedText" />

                            <TextView
                                android:id="@+id/txt_number_of_vote_laugh"
                                android:layout_width="wrap_content"
                                android:layout_height="wrap_content"
                                android:layout_alignBaseline="@+id/btn_Vote_laugh"
                                android:layout_alignBottom="@+id/btn_Vote_laugh"
                                android:layout_toRightOf="@+id/UserIconPic_laugh"
                                android:layout_weight=".4"
                                android:textAppearance="?android:attr/textAppearanceMedium"
                                app:ignore="ObsoleteLayoutParam,HardcodedText" />
                        </RelativeLayout>
                    </TableRow>

                    <TableRow
                        android:id="@+id/tableRow_MainText_laugh"
                        android:layout_width="wrap_content" …
Run Code Online (Sandbox Code Playgroud)

android listview android-layout baseadapter listview-adapter

9
推荐指数
1
解决办法
2万
查看次数

列出getview中重复的项目位置

我正在使用baseadapter创建一个自定义列表视图.我的列表中有10个列表项.我的问题是afetr 6项,前4个是重复.我只是在getview.it中打印的位置值给出0,1,2,3 ,4,5,6,7,8,9,0,1,2,3.我的代码如下.

提前

public class ProductListAdapter extends BaseAdapter  implements OnClickListener{    

/*
 * developer :sanu
 * date :10-4-2013
 * time :3.34 pm
 */
public View row;
private String[] productName;
private String[] producttype;
private String[] priceRangeFrom;
private String[] priceRangeTo;
private String[] productImage;
private Activity activity;
private static LayoutInflater inflater=null;
static String posClicked;
ViewHolder holder;
Integer height1;
Integer width1;
Typeface tf;
Integer FirmaCount;
public ImageLoader imageLoader; 
public ProductListAdapter(Activity a,String[] name,String[] type,String[] price_from,String[] price_to,String[] image,Typeface tf) {
    activity    =  a;
    productName = name; …
Run Code Online (Sandbox Code Playgroud)

android listview view baseadapter

9
推荐指数
1
解决办法
1万
查看次数

Android - Gridview with Custom BaseAdapter,创建onclicklistener

我创建了一个显示字母表字母的gridview.我使用自定义BaseAdapter使用字符串数组填充gridview.

我想要做的是能够获得被点击的单元格的值(字母).为了验证它是否有效,我创建了一个TextView,我希望当用户点击一个项目(单元格)时,使用所选单元格的值设置TextView的文本

在此输入图像描述

我做了一个不起作用的尝试.这是我的代码:

activity_main.xml中

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity"
    tools:ignore="MergeRootFrame" >

    <GridView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/myGridView"
        android:layout_alignParentTop="true"
        android:layout_alignParentLeft="true"
        android:numColumns="7" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Large Text"
        android:id="@+id/feedback"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)

cell.xml

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

    <Button
        android:id="@+id/grid_item"
        android:layout_gravity="center"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="05"
        android:textSize="20sp"
        android:enabled="true"
        android:clickable="true">
    </Button>

</LinearLayout>
Run Code Online (Sandbox Code Playgroud)

主要活动

public class MainActivity extends Activity {

    private TextView text;
    private GridView gridView;
    private final String[] items = new String[]{"A", "B", "C", "D", "E", "F", "G", "H", "I", …
Run Code Online (Sandbox Code Playgroud)

android gridview baseadapter onclicklistener

9
推荐指数
1
解决办法
2万
查看次数

ParseQueryAdapter:在客户端排序数据

我的问题很简单,但我的代码不起作用.我想将ParseQuery的结果排序到ParseQueryAdapter中,然后再将其显示到ListView中.

products.addOnQueryLoadListener(new ParseQueryAdapter.OnQueryLoadListener<Product>() {

        @Override
        public void onLoaded(List<Product> data, Exception e) {
            Collections.sort(data, LastDealComparator);
            products.notifyDataSetInvalidated();
        }

        @Override
        public void onLoading() {
        }

    });
Run Code Online (Sandbox Code Playgroud)

我检查调试器数据是按比较器排序的......但是没有更新到ParseQueryAdapter ... notifyDataSetInvalidated什么都不做.

有关信息,最初我的问题是对指针字段排序查询:

query.orderByDescending("deal.date");
Run Code Online (Sandbox Code Playgroud)

但那也不行......所以我写了一个手动排序.

sorting baseadapter parse-platform

9
推荐指数
1
解决办法
178
查看次数

如何从自定义基本适配器中删除项目?

我正在扩展BaseAdapter以创建自定义列表视图行.我有上下文菜单,每当用户持有该行时会打开,并提示他是否要删除它.但是我该如何删除该行?hashmap只是测试数据.

private MyListAdapter myListAdapter;
private ArrayList<HashMap<String, String>> items;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    items = new ArrayList<HashMap<String,String>>();
    HashMap<String, String> map1 = new HashMap<String, String>();
    map1.put("date", "10/09/2011");
    map1.put("distance", "309 km");
    map1.put("duration", "1t 45min");
    items.add(map1);

    myListAdapter = new MyListAdapter(this, items);
    setListAdapter(myListAdapter);
    getListView().setOnCreateContextMenuListener(this);
}


private class MyListAdapter extends BaseAdapter {

    private Context context;
    private ArrayList<HashMap<String, String>> items;

    public MyListAdapter(Context context, ArrayList<HashMap<String, String>> items) {
        this.context = context;
        this.items = items;
    }

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

    @Override
    public …
Run Code Online (Sandbox Code Playgroud)

java android baseadapter

8
推荐指数
2
解决办法
2万
查看次数

gridview适配器上的overridePendingTransition

我怎样才能插入overridePendingTransition一个GridView`适配器?这种方式不起作用,没有过渡开始工作完美

bt.setOnLongClickListener(new OnLongClickListener(){
                @Override
                public boolean onLongClick(View v) {
                        final String selectedPad = Drum.pads[position];
                        Intent modPad = new Intent(v.getContext(), ModifyPad.class);
                        modPad.putExtra("pad", selectedPad);
                        context.startActivity(modPad);
                        overridePendingTransition(R.anim.exit_slid_in, R.anim.exit_slid_out);
                    return false;
                }
            });
Run Code Online (Sandbox Code Playgroud)

我已经阅读过这篇文章: android启动适配器中的Activity(转换动机方向问题)和注释相关,但我不知道怎么通过ActivityAdapter.有帮助吗?

android transition overriding adapter baseadapter

8
推荐指数
1
解决办法
6711
查看次数

为什么做listview.setAdapter(_adapter)两次崩溃app?

我的关键问题是做lv_apps.setAdapter(_adapter)TWICE是我的应用程序崩溃的原因.(基本上,当我第二次调用populateListView_trial()时,应用程序崩溃 - 并且违规行是lv_apps.setAdapter(_adapter)

Stacktrace位于函数之下

private void populateListView_trial() {

    blockedApps = loadArrayBlockedApps();

    if(isTimerRunning()) {
        blockedApps = loadArrayBlockedApps();
        temp_blockedList = new ArrayAdapter<String>(
                MainActivityCircularSeekbar.this,
                android.R.layout.simple_list_item_1, blockedApps);
    } else {

        holder = new ArrayList<Datamodel>();


        for(Map.Entry<String, String> entry : list_installedApps.entrySet()) {

            Datamodel _appdata = new Datamodel();
            _appdata.setAppname(entry.getKey());
            _appdata.setSelected(true);

            try {
                _appdata.setAppIcon(getIconFromPackageName(entry.getValue(), this));
            } catch (Exception e) {
                e.printStackTrace();
            } catch (OutOfMemoryError e) {
                e.printStackTrace();
            }

            holder.add(_appdata);
        }

        _adapter = new MyAdapter(getApplicationContext(), holder);
        try {

            lv_apps.setAdapter(_adapter);

        } catch (Exception e) …
Run Code Online (Sandbox Code Playgroud)

android listview android-arrayadapter android-listview baseadapter

8
推荐指数
1
解决办法
2713
查看次数

如何在android中获取listview特定项的id?

我正在使用Listview并设置多个项目,每个项目都有喜欢,分享和评论选项.其实我有获取项目编号以及还setTextTextView,它的成功.但是无法在特定项目的Like Button Click事件上获得Item Id.如何在每一个项目获取项目标识ListviewButtonClick事件?

MyAdapter类的演示:

public class Adapter1 extends BaseAdapter implements OnClickListener {
    public ArrayList<HashMap<String, String>> arr = null;
    Context context = null;
    LayoutInflater layoutInflater = null;
    HashMap<String, String> getData = new HashMap<String, String>();

    String urlLike = null;
    TextView strId = null;

    public NewsFeedAdapter(Context context,
            ArrayList<HashMap<String, String>> arr) {
        this.context = context;
        this.arr= arr;
        layoutInflater = LayoutInflater.from(context);
    }

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

    @Override
    public Object getItem(int …
Run Code Online (Sandbox Code Playgroud)

android listview baseadapter

7
推荐指数
1
解决办法
2万
查看次数