以编程方式将解析的图像和文本加载到线性布局中

时间:2019-04-10 20:35:25

标签: java android android-layout parse-platform

我正在尝试创建商品列表,然后按照与下图类似的方式创建商品名称和热量值。 example](https://imgur.com/a/QdkqQiy) 但是,我试图从Parse获取所有数据时执行此操作。我大部分时间都没做好,但是在我循环浏览它们时,我一直被困了几个小时,试图以编程方式添加这两个文本视图,然后一个接一个地添加图像(然后是文本,然后是视图)。 我一直怀疑是否要对代码进行重大更改,因为我不太精通android,但是从到目前为止的观察来看,我的案例似乎是独一无二的,因为它涉及Parse以及结合使用textview和imageview。

以下是我到目前为止在此活动中得到的信息:

XML

    <?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".AdminProductsListActivity">

    <ScrollView
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent">

        <LinearLayout
            android:id="@+id/linLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"></LinearLayout>
    </ScrollView>
</android.support.constraint.ConstraintLayout>

课程

    package com.parse.starter;

    import android.content.Intent;
    import android.graphics.Bitmap;
    import android.graphics.BitmapFactory;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.LayoutInflater;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.ViewGroup;
    import android.widget.ImageView;
    import android.widget.LinearLayout;
    import android.widget.TextView;

    import com.parse.FindCallback;
    import com.parse.GetDataCallback;
    import com.parse.ParseException;
    import com.parse.ParseFile;
    import com.parse.ParseObject;
    import com.parse.ParseQuery;
    import com.parse.ParseUser;

    import java.util.List;

    public class AdminProductsListActivity extends AppCompatActivity {
        LinearLayout linLayout;
        Intent intent;
        String name;
        TextView itemName;
        TextView itemCalories;
        ImageView imageView;



    public void showMain() {
            Intent intent = new Intent(getApplicationContext(), MainActivity.class);
            startActivity(intent);
        }

    public void addNewProduct() {
        Intent intent = new Intent(getApplicationContext(), AddNewProductActivity.class);
        intent.putExtra("shop", name);
        startActivity(intent);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater menuInflater = getMenuInflater();

        menuInflater.inflate(R.menu.new_admin_settings_menu, menu);

        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {

        if (item.getItemId() == R.id.newItem){
            ParseUser.logOut();
            addNewProduct();

        } else if (item.getItemId() == R.id.logout){
            ParseUser.logOut();

            showMain();
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_admin_products_list);
        intent = getIntent();
        name = intent.getStringExtra("username");


        linLayout = (LinearLayout) findViewById(R.id.linLayout);

        setTitle(name);

        ParseQuery<ParseObject> query = new ParseQuery<ParseObject>("Product");
        query.whereEqualTo("username", name);
        query.orderByDescending("objectID");

        query.findInBackground(new FindCallback<ParseObject>() {
            @Override
            public void done(List<ParseObject> list, ParseException e) {
                if (e == null && list.size() > 0){
                    for (ParseObject object : list){
                        ParseFile file = (ParseFile) object.get("image");

                        //if (itemName != null && itemCalories != null){
                            itemName = new TextView(getApplicationContext());
                            itemName.setText(object.getString("name"));
                            itemName.setLayoutParams(new ViewGroup.LayoutParams(
                                    ViewGroup.LayoutParams.MATCH_PARENT,
                                    ViewGroup.LayoutParams.WRAP_CONTENT));

                            itemCalories = new TextView(getApplicationContext());
                            itemCalories.setText(object.getString("calories") + " kcal");
                            itemCalories.setLayoutParams(new ViewGroup.LayoutParams(
                                    ViewGroup.LayoutParams.MATCH_PARENT,
                                    ViewGroup.LayoutParams.WRAP_CONTENT));

                            linLayout.addView(itemCalories);
                            linLayout.addView(itemName);



                        file.getDataInBackground(new GetDataCallback() {
                            @Override
                            public void done(byte[] bytes, ParseException e) {
                                if (e == null && bytes != null){
                                    Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                                    imageView = new ImageView(getApplicationContext());

                                    imageView.setLayoutParams(new ViewGroup.LayoutParams(
                                            ViewGroup.LayoutParams.MATCH_PARENT,
                                            ViewGroup.LayoutParams.WRAP_CONTENT
                                    ));

                                    imageView.setImageBitmap(bitmap);



                                    linLayout.addView(imageView);


                                }
                            }
                        });
                    }
                }
            }
        });

    }
}

现在发生的是所有文本都移到顶部,图像移到了底部。我也尝试过这样做:

file.getDataInBackground(new GetDataCallback() {
                            @Override
                            public void done(byte[] bytes, ParseException e) {
                                if (e == null && bytes != null){
                                    Bitmap bitmap = BitmapFactory.decodeByteArray(bytes, 0, bytes.length);
                                    imageView = new ImageView(getApplicationContext());
                                imageView.setLayoutParams(new ViewGroup.LayoutParams(
                                        ViewGroup.LayoutParams.MATCH_PARENT,
                                        ViewGroup.LayoutParams.WRAP_CONTENT
                                ));

                                imageView.setImageBitmap(bitmap);



                                linLayout.addView(imageView);
                                linLayout.addView(itemCalories);
                                linLayout.addView(itemName);

但随后出现此错误:

The specified child already has a parent. You must call removeView() on the child's parent first.

,在这种情况下,我发现此错误的答案似乎都没有帮助。

长话短说,我什至没有在寻找超级复杂的东西或看起来不错的东西,我只是一个初学者。我只想在使用解析时先加载文本视图,然后再加载图像视图,就像在图像中一样。

有什么想法吗?

0 个答案:

没有答案