ImageView未在ItemList中更新

时间:2018-10-28 18:33:51

标签: android

我正在尝试更新ItemList中的图像,我正在使用以下方法

这是使用以下方法获取ImageView'imgView'对象的方式-

protected void onPostExecute(Void result) {
        super.onPostExecute(result);
        // Dismiss the progress dialog
        if (pDialog.isShowing())
            pDialog.dismiss();
        /**
         * Updating parsed JSON data into ListView
         * */
        ListAdapter adapter = new SimpleAdapter(JSONParsingMainActivity.this, contactList,
                R.layout.list_item, new String[]{"name", "email", "mobile"}, new int[]{R.id.name,
                R.id.email, R.id.mobile});


        lv.setAdapter(adapter);

        if(markedQuestion != null){
            try {
                JSONObject jsonObj = new JSONObject(markedQuestion);
                JSONArray contacts = jsonObj.getJSONArray("data");
                for (int i = 0; i < contacts.length(); i++) {
                    JSONObject c = contacts.getJSONObject(i);

                    String questionid = c.getString("questionid");
                    System.out.println("Question No :" + i + "Question Id is :" + questionid);


                    Long itemId = lv.getItemIdAtPosition(Integer.parseInt(questionid));
                    System.out.println("Item Id xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxasdasd" + itemId);


                    changedView = (CardView) getViewByPosition(Integer.parseInt(questionid),lv);
                    imgView = (ImageView) changedView.findViewById(R.id.imageViewstickId);
                    imgView.setImageResource(R.drawable.cancel);

                }
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }


        lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                mp.start();
                position++;
                Intent intent = new Intent(context, DetailsActivity.class);
                intent.putExtra("position", Integer.toString(position));
                context.startActivity(intent);
            }
        });


    }

    public View getViewByPosition(int pos, ListView listView) {
        final int firstListItemPosition = listView.getFirstVisiblePosition();
        final int lastListItemPosition = firstListItemPosition + listView.getChildCount() - 1;

        if (pos < firstListItemPosition || pos > lastListItemPosition ) {
            return listView.getAdapter().getView(pos, null, listView);
        } else {
            final int childIndex = pos - firstListItemPosition;
            return listView.getChildAt(childIndex);
        }
    }

当我调试时,此代码未更新列表项中的取消图像,即我获得了正确的ID(即XML所示的“ imageViewstickId”),但图像未更新,也未给出任何错误

imgView.setImageResource(R.drawable.cancel);

我的XML代码也-

<?xml version="1.0" encoding="utf-8"?>

<android.support.v7.widget.CardView
    android:id="@+id/cardViewQuestionId"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:card_view="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_margin="8dp"
    app:cardCornerRadius="15dp"
    card_view:cardElevation="2dp"
    card_view:cardCornerRadius="5dp">

<LinearLayout
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="10dp">

 <LinearLayout
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     android:orientation="horizontal"
     >

     <TextView
         android:id="@+id/name"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:paddingBottom="2dp"
         android:paddingTop="6dp"
         android:text="test"
         android:textColor="@color/gradientStart"
         android:textSize="16sp"
         android:textStyle="bold"
         />


     <ImageView
         android:id="@+id/imageViewstickId"
         android:layout_width="30dp"
         android:layout_height="30dp"
         android:layout_gravity="center"
         />

 </LinearLayout>

    <TextView
        android:id="@+id/email"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:paddingBottom="2dip"
        android:textColor="@color/gradientStop" />

    <TextView
        android:id="@+id/mobile"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#5d5d5d"
        android:textStyle="bold" />

</LinearLayout>
</android.support.v7.widget.CardView>

我已经尝试了所有修改代码的工作,等等,但是对我没有用 任何帮助将不胜感激,谢谢

编辑-(已添加调试屏幕截图)请在调试窗口中检查,CardViewId与XML ImageView id相同...仍未更新

enter image description here

5 个答案:

答案 0 :(得分:0)

解决方案:

代替此:

imgView.setImageResource(R.drawable.cancel);

写:

imgView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.cancel));

尝试一下。希望它能起作用。

答案 1 :(得分:0)

您可以简单地使用它:
如果您处于活动状态,则使用此

int id = getResources().getIdentifier("cancel","drawable", getPackageName());

或在片段中

int id = context.getResources().getIdentifier("cancel","drawable", context.getPackageName());
 // "cancel" drawable resource name
 // "drawable" drawable directory

这将返回您要访问的可绘制对象的ID ...然后您可以通过执行以下操作在imageview中设置图像

 imgView.setImageResource(id);

希望这会起作用。

答案 2 :(得分:0)

有两种最佳解决方案:-

1)代替使用

   imgView.setImageResource(R.drawable.cancel);

使用此方法:-

   imgView.setImageDrawable(ContextCompat.getDrawable(context, R.drawable.cancel));

2)使用Glide库       https://bumptech.github.io/glide/doc/download-setup.html

答案 3 :(得分:0)

您的ID正确,但仍未更新,则可能是资源文件(R.java)未更新的问题,请尝试清除项目,然后检查。

如果这不起作用,您还可以尝试以下代码:-

Resources resources = getResources();
imgView.setImageDrawable(resources.getDrawable(R.drawable.cancel));

答案 4 :(得分:0)

对于其他人这样思考可能会有所帮助-

我从这篇帖子中获得了线索-how to know when listview is finished loading data on android

我的数据可能正在更新,但是列表未完全加载,这就是为什么数据被覆盖的原因。我使用了以下代码,感谢发布上述答案的实际用户

lv.addOnLayoutChangeListener(new View.OnLayoutChangeListener() {
                @Override
                public void onLayoutChange(View view, int i, int i1, int i2, int i3, int i4, int i5, int i6, int i7) {

                    Log.d(TAG, "list got updated, do what ever u want");


                    if(markedQuestion != null){
                        try {
                            JSONObject jsonObj = new JSONObject(markedQuestion);
                            JSONArray contacts = jsonObj.getJSONArray("data");
                            for (int x = 0; x < contacts.length(); x++) {
                                JSONObject c = contacts.getJSONObject(x);

                                String questionid = c.getString("questionid");
                                System.out.println("Question No :" + x + "Question Id is :" + questionid);


                                System.out.println(getResources());
                                changedView = (CardView) getViewByPosition(Integer.parseInt(questionid),lv);
                                imgView = (ImageView) changedView.findViewById(R.id.imageViewstickId);
                                //  imgView.setImageResource(R.drawable.cancel);
                                imgView.setImageDrawable(ContextCompat.getDrawable(context,R.drawable.cancel));

                            }
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });