![](/img/trans.png)
[英]how to set the text and image in particular item textview and imageview in horizontal listview
[英]Set text to TextView at a particular position inside a ListView
我正在使用帶有自定義適配器的ListView
。 每行中有兩個TextView
。 我只需要為單擊的textView更改這些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;
}
}
}
}
現在,我需要根據用戶單擊的位置更改itemName
和showResult
的文本。 itemName.setOnClickListener
具有AsyncTask,我將在其中更改這些textViews的文本。 當前,它會更改為listView的最后一行。
如何更改所選位置的位置。
提前致謝。
重寫CustomAdapter的getView(...)函數,其中參數之一是int position。
不要忘記使用convertView,holder和settag / gettag進行平滑滾動並正確引用
更新:
在getView中放置:
convertView.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//perform update on textView here
}
});
另外,我們需要在postExecute()中引用convertView。 您可以在AsycTask參數中傳遞此引用,也可以為適配器設置getter setter,並在asyctask postexecute()中獲得單擊的引用。
首先使用您的兩個字符串和一個布爾值創建一個model(POJO)類,將其作為isChecked調用,然后將getter和setter添加到其中
將值(列表數據)設置為數組列表,並首次將setIsChecked值設置為false。 像這樣
ArrayList<model> list = new ArrayList<model>();
list.add(new model("string1","string2",false);
list.add(new model("string11","string22",false);
等等
現在onItemClickListener用於這樣的循環
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
}
完成了,讓我知道它是否對您有幫助
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”):
}
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.