我正在尝试操作ArrayList适配器中的View。我使用以下代码:
public IHttpActionResult Get(int id)
{
var product = products.FirstOrDefault(p => p.Id == id);
if (product == null)
{
return NotFound();
}
else
{
return Ok(product);
}
}
listView由具有两个文本视图busDestinations和busNumber的水平视图组成。 setText()方法不会以所需方式更改文本。它似乎对busNumberTextView没有影响。
编辑:正如其他用户所说,这些是我现在的代码。
MainActivity.java
public string Get(int id)
{
return "product test";
}
BusAdapter.java
for (int i = 0; i < listView.getCount(); i++){
TextView busDestTextView = (TextView) busAdapter.getView(i, null, null).findViewById(R.id.busDestinations);
TextView busNumberTextView = (TextView) busAdapter.getView(i, null, null).findViewById(R.id.busNumber);
if (dataSnapshot.getKey().equals(busDestTextView.getText().toString())){
busNumberTextView.setText(dataSnapshot.getValue().toString());
break;
}
}
ListItem.xml
package com.example.busnotifier;
import ...;
public class MainActivity extends AppCompatActivity {
private FirebaseDatabase mFirebaseInstance;
private DatabaseReference mFirebaseDatabase;
private FirebaseMessaging mFirebaseMessaging;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final ArrayList<Bus> buses = new ArrayList<Bus>();
buses.add(new Bus("Dev_Guradiya~Industry_House~Palasia", 0));
buses.add(new Bus("Bhavarkua-V", 0));
buses.add(new Bus("Boys_hostel~teen_imli~Khajarana", 0));
buses.add(new Bus("Khativala~Rani_Sati~Agnibaan~Khajrana", 0));
buses.add(new Bus("Kalani_Naga", 0));
buses.add(new Bus("Khandwa_naka~Shalimaar~Scheme_54", 0));
buses.add(new Bus("tilak_nagar", 0));
buses.add(new Bus("Rani_Sati~Agnibaan~Khajrana~Rani_sati", 0));
buses.add(new Bus("Industry_House~Rani_Sati~Agnibaan~Khajrana", 0));
buses.add(new Bus("Agnibaan~Khajarana~Rani_Sati", 0));
buses.add(new Bus("PardesipuraVijaynagar", 0));
buses.add(new Bus("Sai_Mandir~VijayNagar", 0));
BusAdapter busAdapter= new BusAdapter(this, buses);
// Get a reference to the ListView, and attach the adapter to the listView.
final ListView listView = (ListView) findViewById(R.id.busListView);
listView.setAdapter(busAdapter);
mFirebaseInstance = FirebaseDatabase.getInstance();
mFirebaseInstance.getReference("Buses").addChildEventListener(new ChildEventListener() {
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
for (int i = 0; i < listView.getCount(); i++){
if (dataSnapshot.getKey().equals(buses.get(i).getDestinations())){
TextView busNumberTextView = (TextView) listView.getChildAt(i).findViewById(R.id.busNumber);
busNumberTextView.setText(dataSnapshot.getValue().toString());
}
}
Toast.makeText(getApplicationContext(), ""+dataSnapshot.getKey(), Toast.LENGTH_SHORT).show();
}
});
}
}
Bus.java
package com.example.busnotifier;
import ....;
public class BusAdapter extends ArrayAdapter<Bus> {
private FirebaseDatabase mFirebaseDatabase = FirebaseDatabase.getInstance();
private DatabaseReference mDatabaseReference = mFirebaseDatabase.getReference("Buses");
public BusAdapter(Activity context, ArrayList<Bus> buses){
super(context, 0, buses);
}
public View getView(int position, View convertView, ViewGroup parent){
View busListItemView = convertView;
if(busListItemView == null) {
busListItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
}
// TextView for the Bus number
Bus currentBus = getItem(position);
final TextView busNumberTextView = (TextView) busListItemView.findViewById(R.id.busNumber);
busNumberTextView.setText(String.valueOf(currentBus.getBusNumber()));
// Used EraserRegular font for the bus-stop names
Typeface typeFace = Typeface.createFromAsset(getContext().getAssets(), "fonts/KGSecondChancesSolid.ttf");
busNumberTextView.setTypeface(typeFace);
// TextView for the destinations of the corresponding bus-number
final Button destinationsTextView = (Button) busListItemView.findViewById(R.id.busDestinations);
destinationsTextView.setText(currentBus.getDestinations());
destinationsTextView.setTypeface(typeFace);
destinationsTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
/*If the user clicks on a button it will change color and subscribe
the user to corresponding Topic of the FireBase*/
Toast.makeText(getContext(), "Subscribed to: "+destinationsTextView.getText(), Toast.LENGTH_LONG).show();
int color = ContextCompat.getColor(getContext(), R.color.buttonClicked);
destinationsTextView.setBackgroundColor(color);
FirebaseMessaging.getInstance().subscribeToTopic(String.valueOf(destinationsTextView.getText().toString()));
mDatabaseReference.child(destinationsTextView.getText().toString()).setValue(Integer.parseInt(busNumberTextView.getText().toString()));
Log.d(">>>>", "onClick: "+destinationsTextView.getText().toString()+"/"+busNumberTextView.getText().toString());
}
});
return busListItemView;
}
}
答案 0 :(得分:1)
你有两种方法。 1您可以将listview与onItemClickListener一起使用。另一种方法是在总线阵列适配器中实现OnItemSelectedListener。
我对android有点生疏,所以我推荐这个:
pytest -v test/
mAdapter = new BusAdapter();
mListView = (ListView) findViewById(R.layout.my_listview);
mListView.setAdapter(mAdapter);
mListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view,int position, long id) {
mAdapter.onBusItemSelected(position);
Log("Selected item at position " + position);
mAdapter.notifyDataSetChanged()
}
});
...
void onItemSelected(int position) {
getItem(position).selected = true;
}
答案 1 :(得分:0)
我认为你将ViewGroup null放在busAdapter.getView(i, null, null)
中。你可以阅读:https://developer.android.com/reference/android/widget/Adapter.html#getView(int,android.view.View,android.view.ViewGroup)