LinearLayout with animation在Android上更改我的子布局项目

LinearLayout with animation在Android上更改我的子布局项目,android,xml,android-layout,animation,layout,Android,Xml,Android Layout,Animation,Layout,你好吗 我有个问题,我试了很多次来解决它。但我没有成功。让我们来看问题: 我列出了一些“任务”,最初我是这样做的: 布局/fragment_list.xml: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:l

你好吗

我有个问题,我试了很多次来解决它。但我没有成功。让我们来看问题:

我列出了一些“任务”,最初我是这样做的:

布局/fragment_list.xml:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ProgressBar
        android:id="@+id/loading_progress"
        style="?android:attr/progressBarStyleLarge"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:layout_gravity="center" />

    <ListView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/listView"
        android:layout_gravity="center_horizontal" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="10dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:textStyle="bold"
        android:id="@+id/no_item_message"
        android:visibility="invisible" />

</LinearLayout>

列表中的项目是

layout/tasks.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:showDividers="middle"
android:divider="?android:dividerVertical">

    <CheckBox
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/task_checkbox"
        android:clickable="true"
        android:enabled="true"
        android:singleLine="false"
        android:gravity="center_horizontal"
        android:layout_marginTop="20dp"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:visibility="visible"/>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="245dp"
    android:layout_height="wrap_content"
    android:layout_marginLeft="10dp"
    android:id="@+id/task_container">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="5dp"
        android:layout_marginRight="10dp"
        android:textAppearance="?android:attr/textAppearanceMedium"
        android:hint="@string/title_task"
        android:id="@+id/title_task"
        android:layout_gravity="left|center_vertical" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:hint="@string/task_vinculado"
        android:id="@+id/task_vinculado"
        android:layout_gravity="left|center_vertical"
        android:layout_marginTop="5dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="fill_parent"
        android:layout_marginRight="10dp"
        android:layout_marginBottom="5dp"
        android:hint="@string/limit_date"
        android:id="@+id/limit_date"
        android:layout_gravity="left|center_vertical" />
</LinearLayout>

    <ImageButton
        android:id="@+id/delete_task_button"
        android:layout_marginLeft="5dp"
        android:layout_marginTop="15dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_action_discard"
        android:background="?android:selectableItemBackground"
        android:contentDescription="@string/action_remove_item" />

</LinearLayout>

好吧,我想要的方式,看:

(我在Java代码上设置的颜色)

所以,我决定做一个“布局动画改变” (如-->developer.android.com/training/animation/layout.html)

然后,我将layout/fragment_list.xml(如Android开发者网站上的应用程序)替换为

layout/test.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

<ScrollView android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout android:id="@+id/container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:showDividers="middle"
        android:divider="?android:dividerHorizontal"
        android:animateLayoutChanges="true"
        android:paddingLeft="5dp"
        android:paddingRight="5dp" />

</ScrollView>

<TextView
    android:id="@android:id/empty"
    style="?android:textAppearanceSmall"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:text="@string/no_task"
    android:padding="32dp"
    android:textColor="?android:textColorSecondary" />

</FrameLayout>

这个新的布局改变了我的布局项配置,我不能再配置了。看:

我想有一个“布局改变动画”与我的老风格。有人能帮我吗? 我非常感谢大家的关注!!!
谢谢大家!

我设法解决了这个问题。我使用以下代码操作布局:

public class TaskFragment extends Fragment {
 private ViewGroup mContainerView;
 private View view;


 public TaskFragment() {
 }

 @Override
 public View onCreateView(final LayoutInflater inflater, final ViewGroup container, Bundle savedInstanceState) {

 view = inflater.inflate(R.layout.teste, container, false);
 assert view != null;

 mContainerView = (ViewGroup) view.findViewById(R.id.container);

 return view;
}


@Override
public void onStart(){
  super.onStart();

  ContentResolver contentResolver = getActivity().getContentResolver();
  Uri uri = NectarContract.Task.CONTENT_URI;
  Cursor c = contentResolver.query(uri, NectarContract.Task.PROJECTION, null, null, null);
  assert c != null;
  while (c.moveToNext()) {
    Task task = new Task();
    task.setId(c.getInt(NectarContract.COLUMN_TASK_ID));
    task.setTitle(c.getString(NectarContract.COLUMN_TASK_TITLE));
    task.setVinculado(c.getString(NectarContract.COLUMN_TASK_VINCULADO));
    task.setEnd(c.getString(NectarContract.COLUMN_TASK_END));
    task.setPrioridade(c.getInt(NectarContract.COLUMN_TASK_PRIORIDADE));

    view.findViewById(android.R.id.empty).setVisibility(View.GONE);
    populate(task);
  }
}

private void populate(final Task task){
  final ViewGroup newView = (ViewGroup) LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.task, mContainerView, false);

  CheckBox checkbox = (CheckBox) newView.findViewById(R.id.task_checkbox);
  checkbox.setTag(task.getId());
  TextView title = (TextView) newView.findViewById(R.id.title_task);
  TextView vinculado = (TextView) newView.findViewById(R.id.task_vinculado);
  TextView end = (TextView) newView.findViewById(R.id.limit_date);
  LinearLayout container = (LinearLayout) newView.findViewById(R.id.task_container);

  title.setText(task.getTitle());
  if (task.getPrioridade() == 0) {
      title.setTextColor(Color.BLUE);
  }
  if (task.getPrioridade() == 1) {
      title.setTextColor(0xFFE29400);
  }
  if (task.getPrioridade() == 2) {
      title.setTextColor(Color.RED);
  }
  vinculado.setText("Vinculado a: " + task.getVinculado());
  end.setText("Data prevista: " + task.getEndString());

  container.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View view) {
          Intent intent = new Intent(getActivity().getApplicationContext(), TaskActivity.class);
          intent.putExtra(ARG_TASK, task);
          intent.putExtra(TaskActivity.USER, user);
          intent.putExtra(TaskActivity.METHOD, TaskActivity.UPDATE);
          startActivityForResult(intent, 1);
      }
  });
  newView.findViewById(R.id.delete_task_button).setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        mContainerView.removeView(newView);
        if (mContainerView.getChildCount() == 0) {
            view.findViewById(android.R.id.empty).setVisibility(View.VISIBLE);
        }
      }
   });
   mContainerView.addView(newView, 0);
 }
}

然后,从过去的上下文中丢失了信息

要解决它,我必须更改行:

final ViewGroup newView = (ViewGroup) LayoutInflater.from(getActivity().getApplicationContext()).inflate(R.layout.task, mContainerView, false);
并将ir替换为:

final ViewGroup newView = (ViewGroup) getActivity().getLayoutInflater().inflate(R.layout.task, mContainerView, false);