我有两个listarray适配器A和B.'A'包含几个按钮,点击时应该处理'B'中的数据,然后通知适配器'B'发生了一些变化,以便'B'刷新自己和显示新数据。 我在早些时候here提到了这个问题。但该解决方案无法提供足够的信息。
感谢您的解决方案...我尝试实现此功能,但它无法识别按下了哪个按钮(它将整个列表视为一个实体)。此外,即使我尝试保持默认排序
,它也不会更新列表内容 headerListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View v, int arg2,
long arg3) {
sorter = new TwoWaySorter();
Message msg = new Message();
Log.i("Click","arg0.getId():"+arg0.getId());
Log.i("Click", v.getId() + " id is " + v.toString());
Log.i("Click","arg2:"+arg2+" arg3:"+arg3);
switch (v.getId()) {
case R.id.headerList_quantity: // perform sort over the quantity
Log.i("Click", "qty clicked");
System.out.println("..Item is clicked..");
msg.what = UPDATE_QTY;
updateListHandler.sendMessage(msg);
//sorter.sortBasedOn(contentList, "symQty");
//contentAdapter.notifyDataSetChanged();
break;
case R.id.headerList_price: // perform sort over price
Log.i("Click", "list price clicked");
msg.what = UPDATE_PRICE;
updateListHandler.sendMessage(msg);
//sorter.sortBasedOn(contentList, "price");
//contentAdapter.notifyDataSetChanged();
break;
}
}});
private Handler updateListHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_LIST:
sorter = new TwoWaySorter();
Log.i("Click", "sort based on priceYesterday");
sorter.sortBasedOn(contentList, "priceYesterday");
contentAdapter.notifyDataSetChanged();
break;
}
}};
另外,以防万一你想看到适配器。请注意,TextView设置为setClickable =“true”
public class HeaderAdapter extends ArrayAdapter<Header> {
final Header[] listSymbols;
private TwoWaySorter sorter;
private Vector<Content> contentList;
//private ArrayAdapter<Content> contentAdapter;
public HeaderAdapter(Context context, int symResourceID, Header[] objects,
Vector<Content> contentList, ArrayAdapter<Content> contentAdapter) {
super(context, symResourceID, objects);
listSymbols = objects;
sorter = new TwoWaySorter();
this.contentList = contentList;
//this.contentAdapter = contentAdapter;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = (LayoutInflater) getContext()
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
row = inflater.inflate(R.layout.twoway_header_right, parent, false);
}
Header headerRec = listSymbols[position];
TextView symQty = (TextView) row.findViewById(R.id.headerList_quantity);
symQty.setText("" + headerRec.symQty);
Log.i("Click","symQty id"+symQty.getId());
//symQty.setOnClickListener(this);
TextView symPx = (TextView) row.findViewById(R.id.headerList_price);
symPx.setText("" + headerRec.price);
Log.i("Click","symPx id"+symPx.getId());
//symPx.setOnClickListener(this);
TextView symPxC = (TextView) row
.findViewById(R.id.headerList_priceChange);
symPxC.setText("" + headerRec.priceYesterday);
// symPxC.setOnClickListener(this);
TextView symVal = (TextView) row.findViewById(R.id.headerList_value);
symVal.setText("" + headerRec.daysGain);
// symVal.setOnClickListener(this);
TextView symValC = (TextView) row
.findViewById(R.id.headerList_valueChange);
symValC.setText("" + headerRec.daysGainPercent);
// symQty.setOnClickListener(this);
TextView symValCP = (TextView) row
.findViewById(R.id.headerList_valueChangePercent);
symValCP.setText("" + headerRec.change);
// symQty.setOnClickListener(this);
TextView symQuote = (TextView) row.findViewById(R.id.headerList_quote);
symQuote.setText("" + headerRec.week52High);
// symQty.setOnClickListener(this);
row.setBackgroundColor(R.color.light_gray);
return row;
}
/*@Override
public void onClick(View v) {
Log.i("Click", v.getId() + " " + v.toString());
switch (v.getId()) {
case R.id.headerList_quantity: // perform sort over the quantity
Log.i("Click", "qty clicked");
sorter.sortBasedOn(contentList, "symQty");
MainActivity.contentAdapter.notifyDataSetChanged();
break;
case R.id.headerList_price: // perform sort over price
Log.i("Click", "list price clicked");
sorter.sortBasedOn(contentList, "price");
MainActivity.contentAdapter.notifyDataSetChanged();
break;
case R.id.headerList_priceChange: // perform sort over price change
sorter.sortBasedOn(contentList, "priceYesterday");
MainActivity.contentAdapter.notifyDataSetChanged();
Log.i("Click", "price change clicked");
break;
case R.id.headerList_value:
Log.i("Click", "list value clicked");
sorter.sortBasedOn(contentList, "change");
MainActivity.contentAdapter.notifyDataSetChanged();
break;
case R.id.headerList_valueChange:
Log.i("Click", "value change clicked");
sorter.sortBasedOn(contentList, "daysGain");
MainActivity.contentAdapter.notifyDataSetChanged();
break;
case R.id.headerList_valueChangePercent:
Log.i("Click", "change percent clicked");
sorter.sortBasedOn(contentList, "daysGainPercent");
MainActivity.contentAdapter.notifyDataSetChanged();
break;
case R.id.headerList_quote:
Log.i("Click", "return clicked");
sorter.sortBasedOn(contentList, "returns");
MainActivity.contentAdapter.notifyDataSetChanged();
break;
//}
* / //} }
答案 0 :(得分:1)
使用Handler概念。 如果单击list1的任何项,则调用处理程序以更新list2。
import java.util.ArrayList;
import android.app.ListActivity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;
public class MyListView extends ListActivity {
ArrayList<String> pens = new ArrayList<String>();
ArrayAdapter arrayAdapter = null;
private static final byte UPDATE_LIST = 100;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
pens.add("MONT Blanc");
pens.add("Gucci");
pens.add("Parker");
arrayAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, pens);
setListAdapter(arrayAdapter);
getListView().setTextFilterEnabled(true);
ListView lv = getListView();
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
// TODO Auto-generated method stub
System.out.println("..Item is clicked..");
Message msg = new Message();
msg.what = UPDATE_LIST;
updateListHandler.sendMessage(msg);
}
});
// System.out.println("....g1..."+PhoneNumberUtils.isGlobalPhoneNumber("+912012185234"));
// System.out.println("....g2..."+PhoneNumberUtils.isGlobalPhoneNumber("120121852f4"));
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
// TODO Auto-generated method stub
super.onConfigurationChanged(newConfig);
System.out.println("...11configuration is changed...");
}
void addMoreDataToList() {
pens.add("item1");
pens.add("item2");
pens.add("item3");
}
protected void onListItemClick(ListView l, View v, int position, long id) {
super.onListItemClick(l, v, position, id);
Object o = this.getListAdapter().getItem(position);
String pen = o.toString();
Toast.makeText(this, id + "You have chosen the pen: " + " " + pen,
Toast.LENGTH_LONG).show();
}
private Handler updateListHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case UPDATE_LIST:
addMoreDataToList();
arrayAdapter.notifyDataSetChanged();
break;
}
;
};
};
}