Android setText不处理从ArrayListAdapter获取的视图
我正在尝试操作ArrayList适配器中的视图。我正在使用以下代码:Android setText不处理从ArrayListAdapter获取的视图,android,listview,Android,Listview,我正在尝试操作ArrayList适配器中的视图。我正在使用以下代码: for (int i = 0; i < listView.getCount(); i++){ TextView busDestTextView = (TextView) busAdapter.getView(i, null, null).findViewById(R.id.busDestinations); TextView busNumberTextView = (TextView) busAdapte
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;
}
}
我认为您在
busAdapter.getView(I,null,null)
中放置了ViewGroup null。您可以阅读:,android.view.view,android.view.ViewGroup)您有两种方法。1您可以将listview与McClickListener一起使用。另一种方法是在总线阵列适配器中实现OnItemSelectedListener
我对android有点生疏,所以我推荐如下:
你在哪里执行这个代码?子类ListView并重写getView()方法以根据位置设置文本。我使用的是Firebase数据库,如果键与ListView中的任何总线目的地匹配,则希望更新ListView中的总线号。我认为您误解了使用ListView和adpaters的方法。信息更新应在适配器上完成,然后刷新listview。请显示一个,这也意味着您的firebase代码抱歉更新问题太晚。请大家现在看一看。
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();
}
});
}
}
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;
}
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="match_parent"
android:padding="5dp"
android:gravity="center"
android:background="#414141"
android:id="@+id/busListEntry"
android:layout_height="wrap_content">
<Button
android:layout_width="0dp"
android:id="@+id/busDestinations"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:layout_weight="5"
android:background="@color/buttonColor"
android:textColor="#fff"
android:paddingLeft="5dp"
android:textAllCaps="false"
android:layout_marginRight="10dp"
tools:text="aksjfdkaskdfalsasfasfasfasdasf aslkjfaksjfkjaks dkajsdf asdfajsdfjalksd fasjflkajsdasf asjfkajsdklfjas"
android:textSize="17sp"/>
<TextView
android:layout_width="wrap_content"
android:id="@+id/busNumber"
android:textStyle="bold"
android:textSize="17sp"
android:textColor="#fff"
android:layout_height="wrap_content"
android:gravity="center"
android:background="@drawable/round_background"
tools:text="1"/>
package com.example.busnotifier;
public class Bus {
private int busNumber;
private String destinations;
public Bus(String destinations, int busNumber) {
this.busNumber = busNumber;
this.destinations = destinations;
}
public int getBusNumber() {
return busNumber;
}
public String getDestinations() {
return destinations;
}
public void setDestinations(String destinations) {
this.destinations = destinations;
}
public void setBusNumber(int busNumber) {
this.busNumber = busNumber;
}
}
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;
}
public View getView(int position, View convertView, ViewGroup parent)
...
if (bus.selected) {
holder.textView.setTextColor(RED);
} else {
holder.textView.setTextColor(BLACK);
}
...
}