标签: android-arrayadapter

Listview显示错误的图像

我有一个带有ArrayAdapter的ListView,它包含一个带有Image和String的行.这工作正常,直到我决定图像的加载速度慢,所以我无法在显示列表之前加载图像.所以我开始使用一个单独的线程加载图像AsyncTask.

在我开始滚动列表之前,我对结果非常满意.加载了错误的图像,看起来这不是一段时间后图像的问题.如果我尝试对列表进行排序,则问题非常严重,并且没有任何图像位于右侧.

我做错了什么想法?

public View getView(int position, View convertView, ViewGroup parent) {
        View v = convertView;
        ImageView imageView;
        TextView textView;
        if (v == null) {
            LayoutInflater vi = (LayoutInflater) getContext().getSystemService(
                    Context.LAYOUT_INFLATER_SERVICE);
            v = vi.inflate(R.layout.drink_list_row, null);
        }

        Drink drink = allItems.get(position);
        if (drink != null && v != null) {
            imageView = (ImageView) v.findViewById(R.id.picture);
            textView = (TextView) v.findViewById(R.id.drinkName);
            imageView.setVisibility(View.GONE);
            loadImageBitmap(drink, imageView);
            textView.setText(drink.getName());

            if (subItems != null && subItems.contains(drink)) {
                textView.setVisibility(View.VISIBLE);
                imageView.setVisibility(View.VISIBLE);
            } else {
                textView.setVisibility(View.GONE);
                imageView.setVisibility(View.GONE);
            }
        }
        return …
Run Code Online (Sandbox Code Playgroud)

android listview lazy-loading android-arrayadapter imageview

4
推荐指数
1
解决办法
8194
查看次数

微调项目选择无线电丢失

当我的项目包含英文和/或数字符号时,它会显示项目附近的无线电选择,但是当它不包含任何英文和/或数字符号(在我的示例中仅包含希伯来语)时,它不会显示附近的无线电选择这个项目.

对于适配器(数组适配器)创建,我使用了布局"android.R.layout.simple_spinner_item"

在设置Spinner适配器之前,我做了

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
Run Code Online (Sandbox Code Playgroud)

我现在找到的解决方案是将布局设置为"simple_dropdown_item_1line"; 这通过不显示单选按钮解决了问题.

关于如何让单选按钮始终可见的任何想法?


纠正 - 解决方案不起作用.对于我的几个微调器,它在白色背景上显示白色文本.

android spinner radio-button android-arrayadapter

4
推荐指数
1
解决办法
2509
查看次数

ArrayAdapter是原始类型警告?

我正在创建列表视图布局并收到ArrayAdapter警告.错误消息如下.警告消息指向以下文本:

new ArrayAdapter(this, android.R.layout.simple_list_item_1, populateList());
Run Code Online (Sandbox Code Playgroud)

任何帮助都会有所帮助

警告信息:

说明资源路径位置类型ArrayAdapter是原始类型.对泛型类型ArrayAdapter的引用应该参数化为LoginList.java/LoginPlus/src/com/loginplus/home line 95 Java问题

@Override
protected void onResume() {
    super.onResume();
loginListAdapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, populateList());
    loginList.setAdapter(loginListAdapter);
}
Run Code Online (Sandbox Code Playgroud)

android android-arrayadapter

4
推荐指数
1
解决办法
4831
查看次数

片段中的静态数组适配器.好坏练习?

我已经对Java中的静态对象进行了大量的Google搜索,我想我了解它们在Android中是如何工作的.当应用程序的进程终止时,静态对象是GC,而不是当声明静态对象的Activity被销毁时(如果我错了,请纠正我).我有一个使用Tabhost的应用程序,其中包含Fragments.声明对象的Fragment一直到ViewPager的右边(有三个片段).右侧的选项卡有一个显示用户数据的ListView,我希望当用户浏览所有选项卡或导航离开应用程序时,该数据会持续存在.这些数据不需要保存,只需通过正常使用应用程序就可以保留在内存中.给我想要的结果的修复方法是为我的Array Adapter设置一个静态前缀.我的问题是,这被认为是好习惯吗?我知道不正确地使用静态对象会导致内存问题,但是我没有得到任何广泛使用的FC(一遍又一遍地横向画像,快速浏览选项卡,向ListView添加大量数据等).这是我正在使用的代码

static ArrayAdapter<String> arrayAdapter;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) 
{

    View view = inflater.inflate(R.layout.fragment,
            container, false);      

        if (personList == null)
        {

            personList = new ArrayList<String>();

        }


        if (arrayAdapter == null)
        {

            arrayAdapter = new ArrayAdapter<String>
            (getActivity().getApplicationContext(), android.R.layout.simple_list_item_1, personList);

        }
Run Code Online (Sandbox Code Playgroud)

编辑:

这就是我实现这个想法的方式.我在我的主Activity中有这个代码(父对象标签碎片.我把这个代码放在活动的onDestroy()方法中,试着回收一些内存.

@Override
protected void onDestroy() {
    super.onDestroy();

    if (arrayAdapter != null)
    {

        arrayAdapter.clear();

        arrayAdapter = null;

        Log.i("Activity", "Adapter nulled!");

    }


    Log.i("Activity", "Activityhas been destroyed");
}

public ArrayAdapter<String> getArrayAdapter(ArrayList<String> personList)
{

    arrayAdapter = new ArrayAdapter<String>
    (getBaseContext(), …
Run Code Online (Sandbox Code Playgroud)

memory static android fragment android-arrayadapter

4
推荐指数
1
解决办法
5701
查看次数

android.widget.ArrayAdapter.init(ArrayAdapter.java)中的java.lang.NullPointerException

lang.NullPointerException android.widget.ArrayAdapter.init(ArrayAdapter.java)只是将Arraylist值添加到customAdapter类中并将该值设置为listview,请参阅下面的代码helpm me

谢谢

private void fetchCallLogsDetails(String selectedId) {
        this.SelectedLogId = selectedId;
        new FetchCallLogDetailsAsyncTask() {
            protected void onPostExecute(Boolean result) {

                if (mCallLogModel.getmPhoto() != null) {
                    mCallLogPhoto.setImageBitmap(mCallLogModel.getmPhoto());
                }

                mCallLogDetailName.setText(mCallLogModel.getmName());
                mCallLogDetailNumber.setText(mCallLogModel.getmNumber());

                mCallLogDetailName.setTextSize(12);
                mCallLogDetailNumber.setTextSize(10);

                mLogAuditUtilList = mCallLogModel.getmLogAuditUtilList();
                if (mLogAuditUtilList != null) {
                    mCallLogAuditArrayAdapter = new CallLogAuditArrayAdapter(
                            getActivity(), R.id.details_audit_log_list,
                            mLogAuditUtilList);

                    mAuditListView.setAdapter(mCallLogAuditArrayAdapter);
                }

            };
        }.execute("");
    }
    class FetchCallLogDetailsAsyncTask extends
            AsyncTask<String, Integer, Boolean> {
        @Override
        protected Boolean doInBackground(String... params) {
            // reading call logs from contentReslover
            mCallLogUtil = CallLogUtil.newInstance(mconContentResolver);
            mCallLogModel = mCallLogUtil.selectedLogDetails(SelectedLogId);
            return false;
        }

    } …
Run Code Online (Sandbox Code Playgroud)

android android-arrayadapter android-asynctask

4
推荐指数
1
解决办法
3340
查看次数

ListView:如何在自定义ArrayAdapter上添加数据?

要有一个丰富多彩的ListView我已经创建了自己的ArrayAdapter,但是当我想要使用它adapter.clear()或adapter.add()它给我错误.这是代码和错误.

XML文件:

<ListView
    android:id="@+id/android:list"
    android:layout_width="0dip"
    android:layout_height="wrap_content"
    android:padding="10dip"
    android:layout_margin="4dip"
    android:layout_weight="1">
</ListView>
Run Code Online (Sandbox Code Playgroud)

适配器:

class stableArrayAdapter extends ArrayAdapter<String> {

    HashMap<String, Integer> mIdMap = new HashMap<String, Integer>();

    public stableArrayAdapter(Context context, int textViewResourceId, String [] objects) 
    {
        super(context, textViewResourceId, objects);
        for (int i = 0; i < objects.length; ++i) {
            mIdMap.put(objects[i], i);
        }
    }

    @Override
    public long getItemId(int position) {
        String item = getItem(position);
        return mIdMap.get(item);
    }

    @Override
    public boolean hasStableIds() {
        return true;
    }
}
Run Code Online (Sandbox Code Playgroud)

Java代码:

public class createtarget extends …
Run Code Online (Sandbox Code Playgroud)

android android-arrayadapter android-listview

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

Android - notifyDataSetChanged()不起作用

我创建了一个显示问题列表的自定义ArrayAdapter.我查询数据库,转换该数据,将数据传递给数组,然后将数组传递给ArrayAdapter以显示我的列表.

dbData = getDbData();
List<Question> questions = getQuestions(1L);
dbData.closeDb();
setContentView(R.layout.activity_questions);
adapter = new QuestionsAdapter(this, getCurrentContext(), questions, 1L, dbData);
Run Code Online (Sandbox Code Playgroud)

在我的应用程序中,您可以单击各种问题,操作一些东西并返回主列表.底层数组尚未更改,因为更改已在db中保留.我再次查询数据库,运行我的转换,然后我的数组是最新的.我在我的onResume()方法中执行此操作,但适配器将无法识别该notifyDataSetChanged()方法的任何更改.我onResume()看起来像这样:

@Override
protected void onResume() {
    super.onResume();
    dbData = getDbData();
    questions = getQuestions(1L);
    adapter = new QuestionsAdapter(this, getCurrentContext(), questions, 1L, dbData);
    items.setAdapter(adapter);
}
Run Code Online (Sandbox Code Playgroud)

我必须查询数据库,进行转换,创建我的数组,然后为我的更改创建一个新的适配器以显示在主列表中.为什么我不能这样做:

@Override
protected void onResume() {
    super.onResume();
    dbData = getDbData();
    questions = getQuestions(1L);
    adapter.notifyDataSetChanges();
}
Run Code Online (Sandbox Code Playgroud)

我需要做些什么来完成这项工作?谢谢您的帮助.

java android android-arrayadapter

4
推荐指数
1
解决办法
7460
查看次数

类型不匹配:无法从java.lang.String转换为String

我不明白为什么我得到这个错误!

public static class RoomsArrayAdapter<String> extends ArrayAdapter<String>{
****
private String rmName;
    private ArrayList<String> st_list = new ArrayList<String>();

public View getView(int position, View convertView, ViewGroup parent){                      
        View rowView = convertView; 
        LayoutInflater inflater = (LayoutInflater) raaContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        rowView = inflater.inflate(R.layout.room_layout, parent, false);
        rmName = st_list.get(position).toString();
Run Code Online (Sandbox Code Playgroud)

rmName = st_list.get(position).toString();

有我的进口:

import android.text.Editable;
import android.text.TextUtils;
import android.text.TextWatcher;
import android.app.AlertDialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.content.pm.PackageManager;
import android.graphics.Color;
import android.provider.Settings;
import android.util.Log;
import android.util.TypedValue;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup; …
Run Code Online (Sandbox Code Playgroud)

java eclipse string tostring android-arrayadapter

4
推荐指数
1
解决办法
8097
查看次数

convertView.getTag(); 创建投射错误

我正在使用一个片段来创建一个ListView填充CheckBoxes.我尽力找到基于其他问题的解决方案,但我似乎无法修复它.当我运行脚本而不使用:

convertView.getTag();
Run Code Online (Sandbox Code Playgroud)

我的应用程序运行正常,但列表中项目的位置不保存.视图项目跳转.但是,当我使用该方法时,我收到一个错误.日志猫说:

01-02 23:54:20.662: E/InputEventReceiver(1209): Exception dispatching input event.
01-02 23:54:20.672: D/AndroidRuntime(1209): Shutting down VM
01-02 23:54:20.672: W/dalvikvm(1209): threadid=1: thread exiting with uncaught exception (group=0x40a13300)
01-02 23:54:20.782: E/AndroidRuntime(1209): FATAL EXCEPTION: main
01-02 23:54:20.782: E/AndroidRuntime(1209): java.lang.ClassCastException: com.MrBabilin.youdeserveadrink.Items cannot be cast to com.MrBabilin.youdeserveadrink.AlcoholList$MyCustomAdapter$ViewHolder
01-02 23:54:20.782: E/AndroidRuntime(1209):     at com.MrBabilin.youdeserveadrink.AlcoholList$MyCustomAdapter.getView(AlcoholList.java:169)
01-02 23:54:20.782: E/AndroidRuntime(1209):     at android.widget.AbsListView.obtainView(AbsListView.java:2255)
01-02 23:54:20.782: E/AndroidRuntime(1209):     at android.widget.ListView.makeAndAddView(ListView.java:1769)
01-02 23:54:20.782: E/AndroidRuntime(1209):     at android.widget.ListView.fillDown(ListView.java:672)
01-02 23:54:20.782: E/AndroidRuntime(1209):     at android.widget.ListView.fillGap(ListView.java:636)
01-02 23:54:20.782: E/AndroidRuntime(1209):     at android.widget.AbsListView.trackMotionScroll(AbsListView.java:5040)
01-02 23:54:20.782: …
Run Code Online (Sandbox Code Playgroud)

java android listview view android-arrayadapter

4
推荐指数
1
解决办法
3111
查看次数

来自AlertDialog的ArrayAdapter notifyDataSetChanged不起作用

我在Listview中显示我的SQLite数据库中的项目.对于添加项目,我使用AlertDialog.在ALertDialog中,我将项目保存在我的数据库中,并使用数据库中的数据刷新List(userLists).然后我使用notifyDataSetChanged但视图不会改变.

public class MediUserListsFragment extends Fragment {

    private MediDAO mediDAO;
    private ListView listView;
    private List<UserList> userLists;
    private ArrayAdapter<UserList> adapter;

    @Override
    public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        getActivity().setTitle("Medikamenten Listen");

        final View view =  inflater.inflate(R.layout.fragment_medi_user_list, container, false);

        setHasOptionsMenu(true);

        mediDAO = new MediDAO(getContext());

        userLists = mediDAO.getAllUserList();

        listView = (ListView) view.findViewById(R.id.list_view);

        adapter = new ArrayAdapter<>(getContext(),android.R.layout.simple_list_item_1, userLists);
        listView.setAdapter(adapter);

        Button newLstBtn = (Button) view.findViewById(R.id.new_list_button);
        newLstBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                View alertLayout = inflater.inflate(R.layout.dialog_medi_list_new, null);
                final EditText newLstName = …
Run Code Online (Sandbox Code Playgroud)

android listview android-arrayadapter notifydatasetchanged

4
推荐指数
1
解决办法
1468
查看次数