Android - 如何处理单个ListViewItem中的多个元素?
问题描述:
我有一个特定的问题。我正在创建一个应用程序,它允许我显示某些菜肴的菜单。我设计了一个包含TextView和RatingBar的自定义适配器。所以在我的其他Activity(ViewDatabase)中,我从JSON-File(方法名为showData)中检索碟名,并将其显示在获取自定义适配器的ListView中。Android - 如何处理单个ListViewItem中的多个元素?
我现在的问题是,不知道为什么我只能选择我的菜的名称(所以我的适配器的textview)或评级栏(也在我的适配器)。
我试图把方法:myListView.setItemsCanFocus(true);但仍然没有工作。
我没有实现一个clicklistener我的文本在适配器?我试图实现one.I需要一个明确的意图交换活动,但我不能 从一个Adapterclass转到其他类的意图。
在ViewDatabse-类是onItemClick我改变活动如果我点击文本的方法。
这里是我的代码:
- 适配器:
一)
public UserInformationAdapter(Context context, List<UserInformation> objects) {
super(context, R.layout.rating_item, objects);
this.context = context;
table = objects;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.rating_item, null);
}
TextView name = (TextView) v.findViewById(R.id.hauptgerichte);
RatingBar ratingBar = (RatingBar) v.findViewById(R.id.rate_bar);
UserInformation userInformation = table.get(position);
ratingBar.setOnRatingBarChangeListener(onRatingChangedListener(position));
ratingBar.setTag(position);
ratingBar.setRating(getItem(position).getRatingStar());
name.setText(userInformation.getName());
name.setTag(position);
return v;
}
private RatingBar.OnRatingBarChangeListener onRatingChangedListener(final int position) {
return new RatingBar.OnRatingBarChangeListener() {
@Override
public void onRatingChanged(RatingBar ratingBar, float v, boolean b) {
UserInformation item = getItem(position);
assert item != null;
item.setRatingStar(v);
Log.i("Adapter", "star: " + v);
}
};
}
}
这是项目(名称和的RatingBar):
公共类UserInformation {
private String name;
private float ratingStar;
public UserInformation(){
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
void setRatingStar(float ratingStar) {
this.ratingStar = ratingStar;
}
float getRatingStar() {
return 0;
}
@Override
public String toString(){
return name;
}
}
这是检索名称的活动:
- 活动:
公共类ViewDatabase延伸AppCompatActivity {
private static final String TAG = "ViewDatabase";
private FirebaseDatabase mFirebaseDatabase;
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthListener;
private DatabaseReference myRef;
private String userID;
private ArrayList<String> array;
private final List<UserInformation> arr = new ArrayList<>();
private UserInformationAdapter adapter2;
private ListView mListView;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view_database_layout);
array = new ArrayList<>();
mListView = (ListView) findViewById(R.id.list_karnivoure);
mListView.setItemsCanFocus(true);
mAuth = FirebaseAuth.getInstance();
mFirebaseDatabase = FirebaseDatabase.getInstance();
myRef = mFirebaseDatabase.getReference();
FirebaseUser user = mAuth.getCurrentUser();
userID = user.getUid();
myRef.child("shakes").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
// This method is called once with the initial value and again
// whenever data at this location is updated.
showData(dataSnapshot);
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private void showData(DataSnapshot dataSnapshot) {
Iterable<DataSnapshot> children = dataSnapshot.getChildren();
for (DataSnapshot child: children){
UserInformation uInfo = child.getValue(UserInformation.class);
arr.add(uInfo);
adapter2 = new UserInformationAdapter(ViewDatabase.this, arr);
mListView.setAdapter(adapter2);
mListView.setItemsCanFocus(true);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
mListView.setItemsCanFocus(true);
Object listItem = mListView.getItemAtPosition(position);
Intent i = new Intent(ViewDatabase.this,KarnivoureInput.class);
i.putExtra("name", listItem.toString());
startActivity(i);
}
});
}
答
https://*.com/a/8955441/5608931
尝试添加该attribue到TextView
和RatingBar
。这将是可点击的,但不会得到专注
android:focusable="false"
这个dowsnt为我工作。我想主要的问题是我没有一个点击侦听器在我的适配器textView。我不知道如何为textView完全添加一个。我在ViewDatabase类中实现了一个Click Listener,该类中包含“onItemClick”,它为我提供了整个项目的clicklsitener。这个“onItemClick”返回列表视图中的菜名,并将其提供给另一个活动。我怎么能在customAdapter中实现这个意图? –