2014-03-20 5 views
0

У меня есть два ListView. Оба они используют один и тот же адаптер. Я хочу выбирать элементы, взаимно исключающие из этих двух списков. Для каждого элемента в списке у меня есть макетAndroid ListView получает последний выбранный элемент и получает последний выбранный элемент из другого ListView в onItemClick

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <TextView android:id="@+id/type_of_support" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:gravity="left" 
     android:layout_marginLeft="@dimen/left_screen_margin" 
     android:textSize="@dimen/type_of_support_font_size"/> 

    <ImageView android:id="@+id/img_checked_type" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentRight="true" 
     android:layout_marginRight="30dp" 
     android:src="@drawable/ic_check" 
     android:visibility="invisible"/> 
</RelativeLayout> 

я изображение видимого, когда был выбран пункт.

Я не знаю, как получить последний выбранный вид из списка и как получить выбранный вид по id из другого списка.

Я прочитал документацию для ListView, адаптер, AdapterView и не может найти решение

final TypeOfSupportAdapter quoteToCashAdapter = new TypeOfSupportAdapter(SelectionTypeOfSupport.this, R.layout.lv_type_of_support, quoteToCashEngagementsList); 
     final TypeOfSupportAdapter pointRequestsAdapter = new TypeOfSupportAdapter(SelectionTypeOfSupport.this, R.layout.lv_type_of_support, pointRequestsList); 
     final ListView quoteToCashListView = (ListView) findViewById(R.id.quote_to_cash_list); 
     quoteToCashListView.setAdapter(quoteToCashAdapter); 
     quoteToCashListView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
       if (countCheckedTypeOfSupport == 0 && positionCurItemInQuoteToCashList < 0) { 
        ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type); 
        checkTypeOfSupportImageView.setVisibility(View.VISIBLE); 
        countCheckedTypeOfSupport++; 
       } else if (countCheckedTypeOfSupport == 1 && positionCurItemInQuoteToCashList >= 0) { 
        if (position != positionCurItemInQuoteToCashList) { 
         ImageView previouslyCheckedImage = (ImageView) view.findViewById(R.id.img_checked_type); //get previous view 
         previouslyCheckedImage.setVisibility(View.INVISIBLE); 
         ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type); 
         checkTypeOfSupportImageView.setVisibility(View.VISIBLE); 
        } else { 
         countCheckedTypeOfSupport = 0; 
         positionCurItemInQuoteToCashList = -1; 
         ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type); 
         checkTypeOfSupportImageView.setVisibility(View.INVISIBLE); 
        } 
       } else { 
        ImageView previouslyCheckedImage = (ImageView) pointRequestsAdapter.getView(positionCurItemInQuoteToCashList, null, null).findViewById(R.id.img_checked_type); //getView from other listview 
        previouslyCheckedImage.setVisibility(View.INVISIBLE); 
        ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type); 
        checkTypeOfSupportImageView.setVisibility(View.VISIBLE); 
        positionCurItemInQuoteToCashList = -1; 
       } 
       positionCurItemInQuoteToCashList = position; 

       Log.i(TAG, "1. countCheckedTypeOfSupport " + countCheckedTypeOfSupport + " positionCurItemInQuoteToCashList " + positionCurItemInQuoteToCashList + " positionCurItemInPointRequestList" + positionCurItemInPointRequestList); 
      } 
     }); 


     ListView pointRequestsListView = (ListView) findViewById(R.id.point_requests_list); 
     pointRequestsListView.setAdapter(pointRequestsAdapter); 
     pointRequestsListView.setOnItemClickListener(new OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
       if (countCheckedTypeOfSupport == 0 && positionCurItemInPointRequestList < 0) { 
        ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type); 
        checkTypeOfSupportImageView.setVisibility(View.VISIBLE); 
        countCheckedTypeOfSupport++; 
       } else if (countCheckedTypeOfSupport == 1 && positionCurItemInPointRequestList >= 0) { 
        if (position != positionCurItemInPointRequestList) { 
         ImageView previouslyCheckedImage = (ImageView) view.findViewById(R.id.img_checked_type); // get previous view 
         previouslyCheckedImage.setVisibility(View.INVISIBLE); 
         ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type); 
         checkTypeOfSupportImageView.setVisibility(View.VISIBLE); 
        } else { 
         countCheckedTypeOfSupport = 0; 
         positionCurItemInQuoteToCashList = -1; 
         ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type); 
         checkTypeOfSupportImageView.setVisibility(View.INVISIBLE); 
        } 
       } else { 
        ImageView previouslyCheckedImage = (ImageView) quoteToCashAdapter.getView(positionCurItemInPointRequestList, null, null).findViewById(R.id.img_checked_type); //getView from other listview 
        previouslyCheckedImage.setVisibility(View.INVISIBLE); 
        ImageView checkTypeOfSupportImageView = (ImageView) view.findViewById(R.id.img_checked_type); 
        checkTypeOfSupportImageView.setVisibility(View.VISIBLE); 
        positionCurItemInQuoteToCashList = -1; 
       } 
       positionCurItemInPointRequestList = position; 

       Log.i(TAG, "1. countCheckedTypeOfSupport " + countCheckedTypeOfSupport + " positionCurItemInQuoteToCashList " + positionCurItemInQuoteToCashList + " positionCurItemInPointRequestList" + positionCurItemInPointRequestList); 
      } 
     }); 

Может кто-нибудь помочь мне решить эту проблему?

// ОБНОВЛЕНО

private class TypeOfSupportAdapter extends ArrayAdapter<String> { 
     private Context context; 
     private List<String> typeOfSupportList; 
     private int resourceId; 

     public TypeOfSupportAdapter(Context context, int resource, List<String> objects) { 
      super(context, resource, objects); 
      this.context = context; 
      this.resourceId = resource; 
      this.typeOfSupportList = objects; 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE); 
      View rowView = layoutInflater.inflate(resourceId, parent, false); 

      String curTypeOfSupport = typeOfSupportList.get(position); 
      TextView typeOfSupport = (TextView) rowView.findViewById(R.id.type_of_support); 
      typeOfSupport.setText(curTypeOfSupport); 
      return rowView; 
     } 
    } 

ответ

0

Я решаю свою проблему. Вот мой код

private List<TypeOfSupport> quoteToCashEngagementsList; 
     private List<TypeOfSupport> pointRequestsList; 
     private int positionCurItemInQuoteToCashList = -1; 
     private int positionCurItemInPointRequestList = -1; 

     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.select_type_of_support); 

      Resources resources = getResources(); 
      initQuoteToCashEngagements(resources); 
      initPointRequests(resources); 

      final TypeOfSupportAdapter quoteToCashAdapter = new TypeOfSupportAdapter(SelectionTypeOfSupport.this, R.layout.lv_type_of_support, quoteToCashEngagementsList); 
      final TypeOfSupportAdapter pointRequestsAdapter = new TypeOfSupportAdapter(SelectionTypeOfSupport.this, R.layout.lv_type_of_support, pointRequestsList); 
      final ListView quoteToCashListView = (ListView) findViewById(R.id.quote_to_cash_list); 
      quoteToCashListView.setAdapter(quoteToCashAdapter); 
      quoteToCashListView.setOnItemClickListener(new OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
        if(positionCurItemInQuoteToCashList != -1){ 
         quoteToCashEngagementsList.get(positionCurItemInQuoteToCashList).setChecked(false); 
        } 
        if(positionCurItemInPointRequestList != -1){ 
         pointRequestsList.get(positionCurItemInPointRequestList).setChecked(false); 
         pointRequestsAdapter.notifyDataSetChanged(); 
        } 
        quoteToCashEngagementsList.get(position).setChecked(true); 
        positionCurItemInQuoteToCashList = position; 
        quoteToCashAdapter.notifyDataSetChanged(); 

        positionCurItemInPointRequestList = -1; 
       } 
      }); 


      ListView pointRequestsListView = (ListView) findViewById(R.id.point_requests_list); 
      pointRequestsListView.setAdapter(pointRequestsAdapter); 
      pointRequestsListView.setOnItemClickListener(new OnItemClickListener() { 
       @Override 
       public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
        if(positionCurItemInPointRequestList != -1){ 
         pointRequestsList.get(positionCurItemInPointRequestList).setChecked(false); 
        } 
        if(positionCurItemInQuoteToCashList != -1){ 
         quoteToCashEngagementsList.get(positionCurItemInQuoteToCashList).setChecked(false); 
         quoteToCashAdapter.notifyDataSetChanged(); 
        } 

        pointRequestsList.get(position).setChecked(true); 
        positionCurItemInPointRequestList = position; 
        pointRequestsAdapter.notifyDataSetChanged(); 

        positionCurItemInQuoteToCashList = -1; 

       } 
      }); 
} 



private class TypeOfSupportAdapter extends ArrayAdapter<TypeOfSupport> { 
     private Context context; 
     private List<TypeOfSupport> typeOfSupportList; 
     private int resourceId; 


     public TypeOfSupportAdapter(Context context, int resource, List<TypeOfSupport> objects) { 
      super(context, resource, objects); 
      this.context = context; 
      this.resourceId = resource; 
      this.typeOfSupportList = objects; 
     } 

     @Override 
     public TypeOfSupport getItem(int position) { 
      return typeOfSupportList.get(position); 
     } 

     @Override 
     public View getView(int position, View convertView, ViewGroup parent) { 
      LayoutInflater layoutInflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE); 
      View rowView = layoutInflater.inflate(resourceId, parent, false); 

      TypeOfSupport curTypeOfSupport = typeOfSupportList.get(position); 
      TextView typeOfSupport = (TextView) rowView.findViewById(R.id.type_of_support); 
      typeOfSupport.setText(curTypeOfSupport.getTypeOfSupport()); 
      ImageView checkImage = (ImageView) rowView.findViewById(R.id.img_checked_type); 
      if(curTypeOfSupport.isChecked()){ 
       checkImage.setVisibility(View.VISIBLE); 
      } else { 
       checkImage.setVisibility(View.INVISIBLE); 
      } 

      return rowView; 
     } 
    } 
1

Вы должны реализовать логику подборщика в свой адаптер, просто передать флаг для обнаружения, из которого списка вы выбираете деталь. И можете ли вы показать код адаптера и что вы добавите в свой pointRequestsList? Создать класс

class YourItemClass 
{ 
    public boolean selected; 
//... 
} 

И теперь создать два списка для каждого ListView:

ArrayList<YourItemClass> list1 = new ArrayList<YourItemClass>(); 
ArrayList<YourItemClass> list2 = new ArrayList<YourItemClass>(); 

Transfer это списки в адаптер, например, для списка # 1:

final TypeOfSupportAdapter pointRequestsAdapter = new TypeOfSupportAdapter(SelectionTypeOfSupport.this, R.layout.lv_type_of_support, list1); 
final ListView quoteToCashListView = (ListView) findViewById(R.id.quote_to_cash_list); 
quoteToCashListView.setAdapter(quoteToCashAdapter); 
quoteToCashListView.setOnItemClickListener(new OnItemClickListener() { 
     @Override 
     public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) { 
     list1.get(position).selected = !list1.get(position).selected; 
     quoteToCashAdapter.notifyDataSetChanged(); 
     } 

То же вы whould сделать для другого listView, используя list2

И теперь в вашем адаптере u себе это, например

public View getView(int position, View convertView, ViewGroup parent) { 
View row = convertView; 
LayoutInflater inflater = ((Activity) mContext).getLayoutInflater(); 
row = inflater.inflate(mResourse, parent, false); 
final ImageView image = (ImageView) row.findViewById(R.id.yourImage); 

if(transferedList.get(position).selected) 
    image.setVisibility(View.VISIBLE); 
else 
    image.setVisibility(View.INVISIBLE); 
} 

А теперь у вас есть два списка с отборными элементами (отборных, если list1.get (позиция) .selected == TRUE)

Если у вас есть какие-либо вопросы - просто спросите Извините за мой плохой английский :)

+0

Я просто инициализации массива списка в обоих случаях (pointRequestsList & quoteToCashListView) – Ray

+0

Я не понимаю, как я могу получить выбранный элемент в адаптере. – Ray

+0

Просто добавьте поле typeOfSupportList в класс YourItemClass и перенесите его в адаптер, введитеOFSupport.setText (curTypeOfSupport) в адаптер и проверьте выбранный флаг, если это правда, чем показать изображение, если нет - скройте его. Вы должны изменить выбранный флаг в своей деятельности, а затем обновить адаптер, чтобы снова создать свой список и показать, какой элемент вы выбираете. – Govtart

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