2015-07-10 55 views
1

我正在使用帶有自定義Adapter的ListView。每行內有兩個TextView。我只需要更改這些TextView的文本,僅用於我點擊的文本視圖。我怎樣才能實現它?將文本設置到ListView中的特定位置上的TextView

我有我的CustomAdapter內的方法,我初始化TextView

public class MainListAdapter extends BaseAdapter { 

    private static final String TAG = "MainListAdapter"; 

    private Context mContext; 

    private LayoutInflater layoutInflater; 

    private MyViewPager itemViewPager; 

    private View viewMain; 

    private View viewSlide; 

    private TextView cancel; 

    private TextView delete, block; 

    TextView itemName, showResult; 

    int triedOnce; 

    private ArrayList<View> views; 

    private PagerAdapter pagerAdapter; 

    private ArrayList<String> mList; 

    public static final String API_KEY = "MYAPIKEY"; 

    public MainListAdapter(Context context, ArrayList<String> list) { 
     mContext = context; 

     layoutInflater = LayoutInflater.from(mContext); 
     mList = list; 
    } 

    @Override 
    public int getCount() { 
     return mList != null ? mList.size() : 0; 
    } 

    @Override 
    public Object getItem(int position) { 
     return mList != null ? mList.get(position) : null; 
    } 

    @Override 
    public long getItemId(int position) { 
     return position; 
    } 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 
     if (convertView == null) { 
      convertView = layoutInflater.inflate(R.layout.listview_item, null); 
     } 

     if(position%2 == 0){ 
      convertView.setBackgroundResource(R.drawable.lis_bg); 
     }else if(position%2 == 1){ 
      convertView.setBackgroundResource(R.drawable.ls_eppadi_bg); 
     } 

     viewMain = layoutInflater.inflate(R.layout.listview_item_main, null); 
     viewSlide = layoutInflater.inflate(R.layout.listview_item_slide, null); 

     cancel = (TextView)viewSlide.findViewById(R.id.tv_menu_cancel); 
     delete = (TextView)viewSlide.findViewById(R.id.tv_menu_delete); 
     block = (TextView) viewSlide.findViewById(R.id.tv_menu_block); 

     cancel.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        //perform cancel 
       } 
      }); 

     delete.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        //perform delete 
       } 
      }); 

     block.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 
        //perform block 
       } 
      }); 

     views = new ArrayList<View>(); 
     views.add(viewMain); 
     views.add(viewSlide); 

     itemViewPager = (MyViewPager)convertView.findViewById(R.id.vp_list_item); 
     itemViewPager.setSelfIndex(position); 
     pagerAdapter = new PagerAdapter() { 

      @Override 
      public void destroyItem(ViewGroup container, int position, Object object) { 
       ((MyViewPager)container).removeView(views.get(position)); 
      } 

      @Override 
      public Object instantiateItem(ViewGroup container, int position) { 
       ((MyViewPager)container).addView(views.get(position)); 
       return views.get(position); 
      } 

      @Override 
      public boolean isViewFromObject(View arg0, Object arg1) { 
       return arg0 == arg1; 
      } 

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

     fillItemData(convertView, position, viewMain); 
     itemViewPager.setAdapter(pagerAdapter); 
     itemViewPager.setCurrentItem(0); 
     return convertView; 
    } 


    //this is where the textview's are initialised 
    private void fillItemData(View convertView, final int position, View viewMain) { 
     int[] colorCollection = { 
      R.color.green, R.color.royalblue, R.color.violet 
     }; 

     for (int i = 0; i < colorCollection.length; i++) { 
      colorCollection[i] = mContext.getResources().getColor(colorCollection[i]); 
     } 

     int currColor = colorCollection[position % colorCollection.length]; 

     itemName = (TextView)viewMain.findViewById(R.id.tv_item_name); 
     showResult = (TextView)viewMain.findViewById(R.id.tv_show); 

     itemName.setOnClickListener(new OnClickListener() { 
       @Override 
       public void onClick(View v) { 

        new PushTask().execute(position); 
        triedOnce = 0; 

       } 
     }); 

     itemName.setBackgroundColor(currColor); 
     showResult.setBackgroundColor(currColor); 

     itemName.setText(mList.get(position)); 
    } 

    class PushTask extends AsyncTask<Integer, Integer, Integer> { 


     @Override 
     protected void onPreExecute() { 
      itemName.setVisibility(View.GONE); 
      showResult.setVisibility(View.VISIBLE); 
      //set text here based on the position 
      showResult.setText("SENDING"); 
     } 

     @Override 
     protected Integer doInBackground(Integer... position) { 
      int post = position[0]; 
      int respCode = 0; 

      //perform my network operations 

      return respCode; 
     } 

     @Override 
     protected void onPostExecute(Integer response) { 
      switch(response) { 
       case 1: 
        //set text here 
        showResult.setText("SENT"); 
        Handler handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
          @Override 
          public void run() { 
          showResult.setVisibility(View.GONE); 
          itemName.setVisibility(View.VISIBLE); 
          } 
          }, 2000); 
        break; 
       case 2: 
        //set text here 
        showResult.setText("PLEASE WAIT!"); 
        handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
          @Override 
          public void run() { 
          showResult.setVisibility(View.GONE); 
          itemName.setVisibility(View.VISIBLE); 
          } 
          }, 2000); 
        break; 
       case 3: 
        //set text here 
        showResult.setText("FAILED!"); 
        handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
          @Override 
          public void run() { 
          showResult.setVisibility(View.GONE); 
          itemName.setVisibility(View.VISIBLE); 
          } 
          }, 2000); 
        break; 
       case 4: 
        //set text here 
        showResult.setText("FAILED!"); 
        handler = new Handler(); 
        handler.postDelayed(new Runnable() { 
          @Override 
          public void run() { 
          showResult.setVisibility(View.GONE); 
          itemName.setVisibility(View.VISIBLE); 
          } 
          }, 2000); 
        break; 
       default: 
        break; 
      } 

     } 
    } 
} 

現在我需要改變itemNameshowResult「基於位置的用戶點擊其中s文本。 itemName.setOnClickListener有AsyncTask,我將改變這些textViews的文本。 目前它改變了listView的最後一行。

如何更改所選位置。

在此先感謝。

回答

0

重寫CustomAdapter的getView(...)函數,其中一個參數是int位置。

不要忘記使用convertView,支架和settag/gettag平滑滾動和正確引用

更新:

在getView地說:

convertView.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      //perform update on textView here 
     } 
    }); 

我們還需要convertView參考在postExecute()中。您可以通過在AsycTask參數或適配器這一套參考的getter setter和獲得asyctask postexecute()

+0

請看我的問題編輯並讓我知道 –

+0

檢查我的答案 – Kay

-2
Pass View in Async Task and then convert into textView and SetText in DoInBackground Method. 

    new PushTask().execute(v); 


    @Override 
     protected Integer doInBackground(final View position) { 
    runOnUiThread(new Runnable() { 
        public void run() { 
         // some code #3 (Write your code here to run in UI thread) 
TextView txtName=(TextView)position; 
     txtname.setText(「android」): 
        } 
       }); 

    } 
0

創建一個模型(POJO)類第一 與兩個字符串和一個布爾值,稱之爲點擊參考asChecked 爲其添加getter和setter

將值(列表數據)設置爲您的arraylist並將setIsChecked值首次保持爲false。這樣

ArrayList<model> list = new ArrayList<model>(); 
list.add(new model("string1","string2",false); 
list.add(new model("string11","string22",false); 

現在onItemClickListener使用for循環這樣

for(int i = 0 ; i < list.size; i++){ 
list.get(i).setIsChecked(false); 
} 
list.get(itemClickedPosition).setIsChecked(true); 
youradapter.notifyDataSetChanged(); 

現在來到適配器類在那裏,只要你想不喜歡你可以設置所選擇的TextView這

在getView方法做到這一點

if(list.get(position).getIsChecked()){ 
change your textview 
}else{ 
leave as it is 
} 

完成讓我知道它是否可以幫助你

相關問題