при прокрутке текстовые значения в Listview меняются - PullRequest
0 голосов
/ 12 июня 2018

Это моя похвала для адаптера

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/fix_container"
>
<TextView
    android:id="@+id/tv1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginTop="4dp"
    android:textSize="15sp"
    android:textStyle="bold"
    android:text="1"
    android:textColor="@color/black"/>
<TextView
    android:id="@+id/tv2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="15sp"
    android:textColor="@color/black"
    android:layout_toRightOf="@id/tv1"
    android:layout_marginTop="4dp"
    android:textStyle="bold"
    android:layout_marginLeft="10dp"
    android:text="1"
    android:layout_toEndOf="@id/tv1"
    android:layout_marginStart="10dp" />
<TextView
    android:id="@+id/tv3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textColor="@color/black"
    android:textSize="15sp"
    android:layout_toRightOf="@id/tv2"
    android:layout_marginTop="4dp"
    android:layout_marginLeft="10dp"
    android:layout_toEndOf="@id/tv2"
    android:text="1"
    android:layout_marginStart="10dp" />

CustomListAdapter.java

public class CustomListAdapter extends BaseAdapter{
private LayoutInflater layoutInflater;
private Production_Dispatch_Res_DTO rem_res_dto;
List<String> eff_list = new ArrayList<String>();
String[] eff_list_split;

public CustomListAdapter(Context context, Production_Dispatch_Res_DTO res, 
List<String> eff_list) {
    this.rem_res_dto = res;
    layoutInflater = LayoutInflater.from(context);
    this.eff_list = eff_list;
}

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

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

@Override
public long getItemId(int position) {
    return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
    try{
        ViewHolder holder;
        if(convertView == null){
            convertView = layoutInflater.inflate(R.layout.lists,null);
            holder = new ViewHolder();
            holder.tv1 = (TextView) convertView.findViewById(R.id.tv1);
            holder.tv2 = (TextView) convertView.findViewById(R.id.tv2);
            holder.tv3 = (TextView) convertView.findViewById(R.id.tv3);
            convertView.setTag(holder);
        }else {
            holder = (ViewHolder) convertView.getTag();
        }
        eff_list_split= eff_list.get(position).split(",");

        int eff_list_split_size = eff_list_split.length;

        switch (eff_list_split_size){
            case 1:
                if(eff_list_split[0].equals("-1")){
                    holder.tv1.setText("");
                }
                else
                holder.tv1.setText(eff_list_split[0]);
                break;
            case 2:
                if(eff_list_split[0].equals("-1"))
                    holder.tv1.setText("");
                else
                holder.tv1.setText(eff_list_split[0]);

                if(eff_list_split[1].equals("-1"))
                    holder.tv2.setText("");

                else
                holder.tv2.setText(eff_list_split[1]);
                break;
            case 3:
                if(eff_list_split[0].equals("-1"))
                    holder.tv1.setText("");
                else
                    holder.tv1.setText(eff_list_split[0]);

                if(eff_list_split[1].equals("-1"))
                    holder.tv2.setText("");

                else
                    holder.tv2.setText(eff_list_split[1]);

                if(eff_list_split[2].equals("-1"))
                    holder.tv3.setText("");
                else
                holder.tv3.setText(eff_list_split[2]);
                break;
    }
    }catch (Exception e){
        Log.d(VilanConstants.TAG,"/Excp @listAdp"+ e.toString());
    }

    return convertView;
}

public class ViewHolder{
    public TextView tv1;
    public TextView tv2;
    public TextView tv3;
}
}

Я взял список в макете, подобном этому

 <ListView
    android:id="@+id/product_list_details"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:dividerHeight="3dp"
    android:layout_marginTop="10dp"
    android:layout_below="@+id/card_view_dispatch"/>

При запускеэто идет правильно.В то время как прокрутка данных списка в текстовых представлениях меняется каждый раз, когда я прокручиваю.

Я пробовал решения в stackoverflow, на которые ранее был дан ответ.Но они не будут работать для меня.

Любая помощь будет оценена.

Я новичок в Android.

Спасибо.

Ответы [ 3 ]

0 голосов
/ 12 июня 2018

Обновить этот код:

 public class ViewHolder{
    public TextView tv1;
    public TextView tv2;
    public TextView tv3;
  }

до этого

public class ViewHolder{
            public TextView tv1;
            public TextView tv2;
            public TextView tv3;

        holder.tv1 = (TextView) convertView.findViewById(R.id.tv1);
        holder.tv2 = (TextView) convertView.findViewById(R.id.tv2);
        holder.tv3 = (TextView) convertView.findViewById(R.id.tv3);
        }
0 голосов
/ 12 июня 2018

Я видел твой код.это правильно.но вам нужно использовать все представления (TextView) во всех случаях 1, 2 и 3. потому что, когда случай 1 истинен, тогда используется только tv1 (TextView), а другие нет.поэтому другие представления также автоматически используются методом getView ().потому что метод getView () вызывается снова и снова при прокрутке списка.

попробуйте использовать все представления во всех случаях или изменить логику, как вы хотите.но все представления должны использоваться, когда регистр равен true.

0 голосов
/ 12 июня 2018

Попробуйте,

Поставьте

holder.tv1 = (TextView) convertView.findViewById(R.id.tv1);
holder.tv2 = (TextView) convertView.findViewById(R.id.tv2);
holder.tv3 = (TextView) convertView.findViewById(R.id.tv3);

после проверки

if(convertView == null){
     .....
} else {
      ....
}

и попробуйте.Вы инициализируете, когда convertView равен нулю.Но делать это каждый раз и проверять, работает ли он?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...