2016-12-10 3 views
1

У меня есть представление списка поисковых элементов извлекаются из различных веб-страниц, как так:Взаимодействуя с одним элементом в Android ListView влияет на несколько

Visual Aid

Там есть горизонтальный вид прокрутки заголовков, так что пользователи могут полностью увидеть название. Однако, когда я просматриваю один из элементов, еще один элемент около 6 от элемента, с которым я взаимодействовал, также прокручивается вправо. Как я могу предотвратить это?

Update: Вот мой CustomAdapter Код:

public class CustomAdapter extends ArrayAdapter<Item> implements View.OnClickListener{ 

private ArrayList<Item> dataSet; 
Context mContext; 

// View lookup cache 
private static class ViewHolder { 
    TextView itemTitle; 
    TextView itemStore; 
    TextView itemPrice; 
    ImageView storeLogo; 
} 

public CustomAdapter(ArrayList<Item> data, Context context) { 
    super(context, R.layout.row_item, data); 
    this.dataSet = data; 
    this.mContext=context; 

} 

@Override 
public void onClick(View v) { 

    int position=(Integer) v.getTag(); 
    Object object= getItem(position); 
    Item item=(Item)object; 

    switch (v.getId()) 
    { 
     case R.id.store: 
      Snackbar.make(v, "This item is being sold at " + item.getStore() + "." , Snackbar.LENGTH_LONG) 
        .setAction("No action", null).show(); 
      break; 
    } 
} 

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
    // Get the data item for this position 
    Item item = getItem(position); 

    // Check if an existing view is being reused, otherwise inflate the view 
    ViewHolder viewHolder; // view lookup cache stored in tag 

    final View result; 

    if (convertView == null) { 

     viewHolder = new ViewHolder(); 
     LayoutInflater inflater = LayoutInflater.from(getContext()); 
     convertView = inflater.inflate(R.layout.row_item, parent, false); 
     viewHolder.itemTitle = (TextView) convertView.findViewById(R.id.title); 
     //viewHolder.itemStore = (TextView) convertView.findViewById(R.id.type); 
     viewHolder.itemPrice = (TextView) convertView.findViewById(R.id.price); 
     viewHolder.storeLogo = (ImageView) convertView.findViewById(R.id.store); 

     result = convertView; 

     convertView.setTag(viewHolder); 
    } else { 
     viewHolder = (ViewHolder) convertView.getTag(); 
     result = convertView; 
    } 

    viewHolder.itemTitle.setText(item.getTitle()); 
    viewHolder.itemPrice.setText("$" + item.getPrice()); 
    viewHolder.storeLogo.setOnClickListener(this); 
    viewHolder.storeLogo.setTag(position); 

    // Return the completed view to render on screen 
    return convertView; 

} 

}

Вот мой fragment_search.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context="com.painlessshopping.mohamed.findit.Search$PlaceholderFragment"> 



<Button 
    android:text="Next Page" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/buttonUp" 
    android:onClick="buttonClicked" 
    android:elevation="0dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginStart="49dp" /> 

<Button 
    android:text="Previous Page" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/buttonDown" 
    android:onClick="buttonClicked" 
    android:elevation="0dp" 
    android:layout_marginStart="62dp" 
    android:layout_alignParentBottom="true" 
    android:layout_toEndOf="@+id/buttonUp" /> 

<EditText 
    android:layout_height="wrap_content" 
    android:inputType="textPersonName" 
    android:ems="10" 
    android:id="@+id/editText" 
    android:layout_width="250dp" 
    android:hint="What can I help you find?" 
    android:layout_alignParentTop="true" 
    android:layout_alignParentStart="true" /> 

<ListView 
    android:layout_width="match_parent" 
    android:id ="@+id/listView" 
    android:layout_centerVertical="true" 
    android:layout_alignParentStart="true" 
    android:layout_height="375dp" /> 

<Button 
    android:text="Search" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/searchBtn" 
    android:layout_alignParentTop="true" 
    android:layout_toEndOf="@+id/editText" /> 

Вот мой row_item.xml (для пользовательских адаптер)

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_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" 
    android:padding="10dp"> 

<HorizontalScrollView 
    android:id="@+id/horizontalScrollView" 
    android:layout_width="0px" 
    android:layout_height="wrap_content" 
    android:layout_weight="1"> 

    <TextView 
     android:id="@+id/title" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_alignParentTop="true" 
     android:maxLines="1" 
     android:text="Sample Text for Android Horizontal Scroll View Goes Here" 
     android:textAppearance="@style/TextAppearance.AppCompat.Headline" 
     android:textStyle="bold" 
     android:textSize="18sp" 
     android:textColor="@color/dgrey"/> 

</HorizontalScrollView> 


<ImageView 
    android:id="@+id/store" 
    android:layout_width="wrap_content" 
    android:layout_height="match_parent" 
    android:layout_centerVertical="true" 
    android:src="@drawable/ic_favorite_border_black_24dp" /> 

    </LinearLayout> 

<TextView 
    android:id="@+id/price" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_below="@+id/horizontalScrollView" 
    android:text="$39.99" 
    android:textAppearance="@style/TextAppearance.AppCompat.Body1" 
    android:textSize="20sp" 
    android:textColor="@color/colorAccent" 
    android:textStyle="bold" 
    /> 


</LinearLayout> 
+1

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

+0

Я добавил код адаптера и два соответствующих ресурса xmls раскладки, надеюсь, это поможет. –

+0

Всегда ли это то же расстояние, что и у видов? –

ответ

1

Из-за производительности в конструкторе мы проверяем и видим, можем ли мы использовать, мы будем использовать предыдущий макет, который сгенерирован, и просто попытаемся заменить их значения, но в вашем случае, потому что вы не можете изменить полосу прокрутки так что ваш новый элемент и предыдущие элементы будут иметь одинаковый вид полосы прокрутки. Надеюсь, я был ясен. так что вы должны всегда создавать новую структуру, как это:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
// Get the data item for this position 
Item item = getItem(position); 

// Check if an existing view is being reused, otherwise inflate the view 
ViewHolder viewHolder; // view lookup cache stored in tag 

final View result; 


    viewHolder = new ViewHolder(); 
    LayoutInflater inflater = LayoutInflater.from(getContext()); 
    convertView = inflater.inflate(R.layout.row_item, parent, false); 
    viewHolder.itemTitle = (TextView) convertView.findViewById(R.id.title); 
    //viewHolder.itemStore = (TextView) convertView.findViewById(R.id.type); 
    viewHolder.itemPrice = (TextView) convertView.findViewById(R.id.price); 
    viewHolder.storeLogo = (ImageView) convertView.findViewById(R.id.store); 

    result = convertView; 

    convertView.setTag(viewHolder); 

viewHolder.itemTitle.setText(item.getTitle()); 
viewHolder.itemPrice.setText("$" + item.getPrice()); 
viewHolder.storeLogo.setOnClickListener(this); 
viewHolder.storeLogo.setTag(position); 

// Return the completed view to render on screen 
return convertView; 

} 

также, возможно, там были лучше так, что я не знаю, но это решит вашу проблему, по крайней мере.

UPDATE: для получения дополнительной информации о том, как ListView работы и наконечник производительности this link, кажется, хорошо

Смежные вопросы