0

어제 여기에 question을 게시했습니다. 적절한 코드 스 니펫을 추가하지 않았으므로 솔루션을 거의 얻지 못했습니다. 그래서 여기에 나는 그것을 새롭게 게시하고 있습니다. 질문에 적극적으로 참여하십시오.단일 BaseAdapter를 사용하여 여러 listViews를 처리하는 데 문제가 있습니다

세 개의 탭 (A, B, C)이 있습니다. 이들 탭 각각은 ActivityGroup 클래스입니다. TabC에는 listView가 포함되어 있습니다. TabA와 TabB에는 TabC로 이동하는 버튼이 있습니다.

tabC의 클래스의 XML 파일 (이 요청을위한이 탭 에서 오는)

<LinearLayout 
     android:id="@+id/linearLayout1" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content"> 

     <ListView 
     android:id="@+id/enquiryListViewA" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:layout_marginTop="7dp" > 
</LinearLayout> 

tabC의 대상 클래스가 나는

public class TestClass extends Activity { 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if(0 == Constants.requestID) { //requestID is used to identify the tab 
      //request from tab A 
      setContentView(R.layout.custom_fullpicture_A); 
     } else { //request from tab B 
      setContentView(R.layout.custom_fullpicture_B); 
     } 
} 

그리고 핸들러 클래스

입니다 오전 설정 어댑터. 여기에 또한 내가 탭 형식

if(0 == Constants.requestID) { 
    ListView enquiryView = (ListView) ((Activity) childContext).findViewById(R.id.enquiryListViewA); 
    adapterA = new CustomFullPictureAdapter(childContext, msg.obj); 
    enquiryView.setAdapter(adapterA); 
} else { 
    ListView enquiryView = (ListView) ((Activity) childContext).findViewById(R.id.enquiryListViewB); 
    adapterB = new CustomFullPictureAdapter(childContext, msg.obj); 
    enquiryView.setAdapter(adapterB); 
} 

그리고 adpater 클래스의의 getView 방법에 따라 유효한 목록보기를 확인 그래서 여기

public View getView(int position, View convertView, ViewGroup parent) { 
    ViewHolder holder; 
    System.out.println("Full Picture adapter: CONVERT VIEW : :: " + convertView); 
    System.out.println("Data count from DB :: " + getCount()); 
    int viewType = Constants.requestID; 

    View viewAccounts = null; 
    View viewCM = null; 
    View view = null; 
    View masterView = null; 

    if(viewType == 0) { 
     viewAccounts = convertView; 
    } else if(viewType == 1) { 
     viewCM = convertView; 
    } else { 
     view = convertView; 
    } 


    if(viewAccounts == null) { 
     holder = new ViewHolder(); 
     if(!Constants.isLoggedInCustomer) { //logged in as user 
      viewAccounts = mInflater.inflate(R.layout.custom_fullpicturerow_A, null); 

      holder.salesCostAcc = (TextView) viewAccounts.findViewById(R.id.vSalesCostAcc); 
      holder.profitAcc = (TextView) viewAccounts.findViewById(R.id.vProfitAcc); 
      holder.gpAcc = (TextView) viewAccounts.findViewById(R.id.vGpAcc); 
      holder.salesValueAcc = (TextView) viewAccounts.findViewById(R.id.vSalesValueAcc); 
      holder.quantityAcc = (TextView) viewAccounts.findViewById(R.id.vQuantityAcc); 
      holder.transactionCountAcc = (TextView) viewAccounts.findViewById(R.id.vTransAcc); 
      holder.avgPriceAcc = (TextView) viewAccounts.findViewById(R.id.vAvgPriceAcc); 
      holder.objectNameAcc = (TextView) viewAccounts.findViewById(R.id.vObjectNameAcc); 
      holder.objectCodeAcc = (TextView) viewAccounts.findViewById(R.id.vObjectCodeAcc); 

      holder.salesValueAcc.setText(searchArrayList.get(position).getSalesValue()); 
      holder.quantityAcc.setText(searchArrayList.get(position).getQuantity()); 
      holder.transactionCountAcc.setText(searchArrayList.get(position).getTransactionCount()); 
      holder.avgPriceAcc.setText(searchArrayList.get(position).getAvgPrice());  
      holder.objectNameAcc.setText(searchArrayList.get(position).getObjectName()); 
      holder.objectCodeAcc.setText(searchArrayList.get(position).getObjectCode()); 

      holder.salesCostAcc.setText(searchArrayList.get(position).getSalesCost()); 
      holder.profitAcc.setText(searchArrayList.get(position).getProfit()); 
      holder.gpAcc.setText(searchArrayList.get(position).getProfitMargin()); 

      masterView = viewAccounts; 

      viewAccounts.setTag(holder); 
     } else { 

     } 
    } 



    if(view == null) { 
     holder = new ViewHolder(); 
     if(!Constants.isLoggedInCustomer) { //logged in as user 
      viewCM = mInflater.inflate(R.layout.custom_fullpicturerow_B, null); 

      holder.salesCost = (TextView) viewCM.findViewById(R.id.vSalesCost); 
      holder.profit = (TextView) viewCM.findViewById(R.id.vProfit); 
      holder.gp = (TextView) viewCM.findViewById(R.id.vGp); 
      holder.salesValue = (TextView) viewCM.findViewById(R.id.vSalesValue); 
      holder.quantity = (TextView) viewCM.findViewById(R.id.vQuantity); 
      holder.transactionCount = (TextView) viewCM.findViewById(R.id.vTrans); 
      holder.avgPrice = (TextView) viewCM.findViewById(R.id.vAvgPrice); 
      holder.objectName = (TextView) viewCM.findViewById(R.id.vObjectName); 
      holder.objectCode = (TextView) viewCM.findViewById(R.id.vObjectCode); 

      holder.salesValue.setText(searchArrayList.get(position).getSalesValue()); 
      holder.quantity.setText(searchArrayList.get(position).getQuantity()); 
      holder.transactionCount.setText(searchArrayList.get(position).getTransactionCount()); 
      holder.avgPrice.setText(searchArrayList.get(position).getAvgPrice());  
      holder.objectName.setText(searchArrayList.get(position).getObjectName()); 
      holder.objectCode.setText(searchArrayList.get(position).getObjectCode()); 

      holder.salesCost.setText(searchArrayList.get(position).getSalesCost()); 
      holder.profit.setText(searchArrayList.get(position).getProfit()); 
      holder.gp.setText(searchArrayList.get(position).getProfitMargin()); 

      masterView = viewCM; 

      viewCM.setTag(holder); 
     } else { 

     } 
    } 

    if(null != masterView) 
    holder = (ViewHolder) masterView.getTag(); 

    if(0 == position % 2) 
     masterView.setBackgroundResource(R.color.textColorWhite); 
    else 
     masterView.setBackgroundResource(R.color.textColorCyan); 

    return masterView; 
} 

입니다 일어나는 것입니다. 사용자가 TabA 또는 B에서 TabC로 단추를 클릭합니다. 그러면 TestClass가 탭의 현재 활동에 추가됩니다. requestID 변수를 사용하면 어댑터가 TabA 및 TabB의 TestClass에 다른 데이터를 제공합니다. 그러나 탭 사이를 전환하면 모두 동일한 값을 갖습니다.

희망 나는 혼동하지 않았습니다. 문의 사항이 있으시면 문의하십시오. 차단하는 게 뭐라고 생각하니?

+0

그러면 동일한 어댑터를 사용하여 다른 탭 아래에서 다른 데이터를 원하십니까? – Prateek

+0

네, 맞아요 – Renjith

+0

한 가지 할 수있는 일은 정적 변수를 사용하고 탭에서 변수를 어떤 값으로 설정하고 이제는이 값을 다른 탭으로 이동 한 후에이 작업을 수행했는지 확인하십시오. 그런 다음 각 클래스의 어댑터를 다른 데이터로 초기화하십시오. – Prateek

답변

1

AFAIK, 게시 된 코드에서 볼 수있는 것처럼 하나의 컬렉션, 즉 searchArrayList을 사용하고 있습니다.

은 상태를 올바르게 유지해야합니다. 해결책을 찾으려면.