0

i have a specific issue. Im creating a App which allows me to display recepts of certain dishes. I designed a custom Adapter which contains a TextView and RatingBar. So in my other Activity(ViewDatabase) i retrieve the dish-name from a JSON-File (method is called : showData) and display it on a ListView which gets the custom adapter.

My problem is now that dont know why i can only select either the name of my dish ( so the textview of my adapter ) or the ratingbar ( is also in my adapter).

I tried to put in the method : myListView.setItemsCanFocus(true); but still doesnt work.

Is i didnt implement a clicklistener to my text in the Adapter? I tried to implement one.I need a explicit intent which swaps the Activity but i cant go from a Adapterclass to a other class in a intent.

In the ViewDatabse- Class is onItemClick my method for changing the activty if i click the text.

Here is my code :

  • Adapter:

a)

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);
        }
    };
}

}

This is the Item (for name and ratingbar):

public class 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;
}

}

This is the Activity which retrieves the Name:

  • Activity:

public class ViewDatabase extends 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);
            }
        });

    }
Jst Ice
  • 11
  • 1
  • 3

1 Answers1

0

https://stackoverflow.com/a/8955441/5608931

Try adding this attribue to TextView and RatingBar . It would be clickable but will not get Focused

android:focusable="false"
Faizal Abbas
  • 205
  • 1
  • 10
  • this dowsnt work for me. I guess the main problem is that i dont have a click listener for the textView in my adapter. I dont know how to add one for the textView there exactly. I implemented a click Listener in the ViewDatabase class which "onItemClick" which gives me a clicklsitener for the whole item. this "onItemClick" returns me the name of a dish in the listview and gives it to another activty. How could i kinda make this intent in the customAdapter? – Jst Ice Sep 23 '17 at 13:13